我有两个名为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,
}
...
}
}
答案 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会问类似的问题,但还没有答案,哈哈。