【发布时间】:2018-08-14 14:15:31
【问题描述】:
我正在开发一个 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
.....
.....
对不起,如果我在这里的描述不够清晰,欢迎任何建议。
吉米
【问题讨论】:
-
理想情况下有一个变量
isLoading = true,当为真时返回一个加载小部件。在then块中调用setState和isLoadingfalse。 -
@Hemanth 听起来不错!
标签: async-await dart flutter