如何等待功能在颤动中完成?

How to wait till functions complete in flutter?

我有两个名为 getAllContacts() 的函数,它们将从移动设备和 upDateAllContacts() 中获取所有联系人,后者使用联系号码创建小部件并将其附加到名为 registerdUsers = [] 的列表中,并在列中使用 registedUser 小部件。 问题是小部件不可见,除非我导航到另一个屏幕并返回。

List registeredUsers =  <Widget>[];
class  ...{
   ...
     @override
     initState() {
     getAllContacts() //It greps all the contacts from mobile
     upDateAllContacts()//contacts to create widgets which goes in to registeredUsers list
    super.initState();
  }

  @override
  Widget build(BuildContext context) {
   ...
     column { 
       children :registeredUsers,
     }

   ...
  }



}

让你 getAllContacts return Future and use FutureBuilder to render widgets. Whenever that future's state changes or an error occurs, FutureBuilder will call it's build 回调 return 适当的小部件。

代码看起来像这样:

FutureBuilder(
    // Assuming loadAllContacts returns Future<Contacts>
    future: loadAllContacts(),

    // This callback will be called whenever future's state changes
    builder: (BuildContext context, AsyncSnapshot<Contacts> snapshot) {
        if (snapshot.hasData) {
            return ListView(…);
        } else if (snapshot.hasError) {
            return Text('Failed to load the contacts');
        } else {
            return Text('Loading the contacts');
        }
    },
),

getAllContacts 设为流式传输事件,然后使用 StreamBuilder -> 这将始终为您的联系人提供最新更新,因此您无需明确更新它们(不再 upDateAllContacts).

您只需要确保您的数据库 query/grep returns 是一个流媒体事件。

例如,Firebase 允许轻松进行实时更新。使用 Firebase 实时数据库,流返回为:

FirebaseDatabase.instance.reference().child('$refName').onValue

有很多关于使用流生成器的话题 - 这里是

如果问题变成了从哪里获取数据以及如何将其变成流,那么 this thread 会问一个类似的问题,但还没有答案,哈哈。