Flutter:如何提取未来的对象,以便与普通对象一样使用它?

发布于 2025-02-11 12:13:28 字数 520 浏览 1 评论 0 原文

我想从HTTP请求中提取未来对象,以便可以将其用作小部件中的常规对象。我该如何实现? (下面的抽象代码示例)

class _SomePageState extends State<SomePage> {
  Data? _data;

  @override
  void initState() {
    _loadData();
    super.initState();
  }

  void _loadData() async {
    await Service.getData().then((value) {
      setState(() {
        _data = value;
      });
    });
  }

  @override
  Widget build(BuildContext context) {
    //further use of the _data variable
  }
}

在这种情况下,我将有延迟的错误错误。总的来说,我想听听有关使用解释的未来对象的简短建议。谢谢

I want to extract the future object from the http request so that I can use it as a regular object in the widget. How can I achieve this? (abstract code example below)

class _SomePageState extends State<SomePage> {
  Data? _data;

  @override
  void initState() {
    _loadData();
    super.initState();
  }

  void _loadData() async {
    await Service.getData().then((value) {
      setState(() {
        _data = value;
      });
    });
  }

  @override
  Widget build(BuildContext context) {
    //further use of the _data variable
  }
}

In this case i'll have lateInitialization Error. In general, I would like to hear brief recommendations for working with future objects with explanations. Thanks

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

雨后咖啡店 2025-02-18 12:13:28

通常,当在 构建方法中使用 的工作时,我们使用在这里是Google团队的视频,介绍了如何使用它。

在您的示例中:

_loaddata()函数中:

Future _loadData() async {
  await data = Service.getData();
    return data;
}

构建方法中

@override
  Widget build(BuildContext context) {
    return DefaultTextStyle(
      style: Theme.of(context).textTheme.headline2!,
      textAlign: TextAlign.center,
      child: FutureBuilder<String>(
        future: _loadData(), 
        builder: (BuildContext context, AsyncSnapshot<String> snapshot) {
          if (snapshot.hasData) {
            return Text("data exists");
          } else if (snapshot.hasError) {
            return Text(snapshot.error as String);

          } else {
            return CircularProgressIndicator();
          }
       
        },
      ),
    );
  }

Usually when working with Future's within the build method, we use FutureBuilder.
Here is a video from the Google team on how to use it.

In your example:

In the _loadData() function:

Future _loadData() async {
  await data = Service.getData();
    return data;
}

In the build method

@override
  Widget build(BuildContext context) {
    return DefaultTextStyle(
      style: Theme.of(context).textTheme.headline2!,
      textAlign: TextAlign.center,
      child: FutureBuilder<String>(
        future: _loadData(), 
        builder: (BuildContext context, AsyncSnapshot<String> snapshot) {
          if (snapshot.hasData) {
            return Text("data exists");
          } else if (snapshot.hasError) {
            return Text(snapshot.error as String);

          } else {
            return CircularProgressIndicator();
          }
       
        },
      ),
    );
  }
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文