首页 > 解决方案 > Flutter:调用“嵌套未来”的正确方法

问题描述

在 Flutter 中调用嵌套未来的最佳方法是什么?还是一般的颤动?

在我的应用程序中,我必须获取当前用户(其数据位于final storage = new FlutterSecureStorage();.

从这个用户,我调用了一个用户 id的 API 。这两个部分独立工作正常(很慢,但这是另一回事)。

在许多屏幕上,我必须调用异步函数,我通过使用来做到这一点Future.delayed,而我的同事习惯于使用这样的东西:

  void initState() {
    super.initState();
    getCurrentUser();
  }

  void getCurrentUser() async {
    user = await UserAuth.getCurrentUser();
  }

这是我的嵌套期货。我需要在我的 initState 上加载当前用户来加载我的出版物。我必须在其中获取用户,因为它也可以是非当前用户(此功能将用于检索当前用户以及其他用户的出版物)。

class _UserPublicationsState extends State<UserPublications> {
  List<Publication> listPublications;
  List<Widget> list = [];
  User user;

  @override
  void initState() {
    super.initState();
    Future.delayed(Duration.zero, () async {
      await UserAuth.getCurrentUser().then((value) {
        setState(() {
          user = value;
          UserWS.getPublicationsPerUsers(user).then((value) {
            setState(() {
              listPublications = value;
            });
          });
        });
      });
    });
  }

  @override
  Widget build(BuildContext context) {
    if (listPublications == null) {
      return FullPageLoading();
    }

    String title = "title";

    return SafeArea(
      child: Scaffold(
        appBar: getSimpleAppBar(context, title),
        body: SingleChildScrollView(
          child: getSavedPublications(),
        ),
      ),
    );
  }
}

标签: flutternestedfuturesetstate

解决方案


我不确定你的方法是什么,但你可以把你的未来放在 Future.wait() 的列表中

像这样:

Future.wait([
      Future.delayed(Duration.zero),
      Future.delayed(Duration.zero),
    ]);

如果您的意思是未来取决于另一个未来,您应该在未来调用之后使用 .then()

像这样:

Future.delayed(Duration.zero).then((value) => Future.delayed(Duration.zero));

我希望这就是你要找的


推荐阅读