如何等待功能完成?

时间:2020-06-06 12:44:00

标签: flutter dart flutter-layout flutter-dependencies

我有两个名为getAllContacts()的函数,这些函数将从mobile和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,
     }

   ...
  }



}

2 个答案:

答案 0 :(得分:0)

使功能getAllContacts返回Future并使用FutureBuilder渲染小部件。每当Future的状态更改或发生错误时,FutureBuilder都会调用它的build回调函数来返回适当的小部件。

代码看起来像这样:

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');
        }
    },
),

答案 1 :(得分:0)

使getAllContacts流事件,然后使用StreamBuilder->这将始终具有联系人的最新更新,因此您无需显式更新(不再需要upDateAllContacts )。

您只需要确保数据库查询/ grep返回流事件即可。

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

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

有很多关于使用流生成器的主题-这里是Firebase using Firestore

的主题之一。

如果问题出在哪里,您是从哪里获取数据以及如何将其制成数据流,那么this thread会问类似的问题,但还没有答案,哈哈。