如何等待功能在颤动中完成?
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 会问一个类似的问题,但还没有答案,哈哈。
我有两个名为 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 会问一个类似的问题,但还没有答案,哈哈。