我正在开发Flutter应用程序,但不确定在从UI调用异步代码时应该怎么做 - 例如,在UI小部件的构建方法中调用。
例如,我的应用程序通过服务类连接Firebase,该服务类使用Async-Await样式从Firebase获取记录。使用await确保我的服务类方法将在返回到UI端之前完成记录检索。
然而,由于服务类方法被标记为异步,它会立即向调用UI小部件返回一个Future,而UI代码继续运行,而不是等待服务类方法完成。
我可以编写“then()”回调来处理已检索的记录,但其他遵循该异步调用结果并且依赖于其结果的小部件内部代码呢?这是否意味着我需要将所有内容嵌入“then()”子句中,并避免在返回Future的方法调用后添加任何执行步骤?有没有针对这种使用模式的建议模式?
@override
Widget build(BuildContext context) {
RealtimeDatabase.getData() // my service class
.then((onValue) {
..... // do something after the async call is completed
}
..... // do something immediately before the async call is done
class RealtimeDatabase {
Future<String> getData() async {
DataSnapshot dataSnapshot = await FirebaseDatabase.instance.reference().orderByKey().once(); // will wait until completed
.....
.....
如果我的描述不够清晰,非常欢迎提出建议。
Jimmy
isLoading = true
,当为真时返回一个加载小部件。在then
块中使用setState
将isLoading
设置为假。 - Hemanth Raj