【发布时间】:2020-05-29 11:34:45
【问题描述】:
快速提问:如何在小部件的 build 方法中执行导航?
- 我正在开发一个 Flutter 应用。
- 我使用 Bloc 架构。
我有一个带有创建表单的屏幕。当用户按下按钮时,它会调用 REST api。在执行呼叫时,我会显示一个循环进度。当进度结束时,我希望弹出屏幕(使用导航)。
为了显示作业状态,我在块中使用了 Stream,在小部件中使用了 StreamBuilder。所以我想做这样的事情:
return StreamBuilder<Job<T>>(
stream: jobstream,
builder: (context, snapshot) {
if (snapshot.hasData) {
if (snapshot.data.jobStatus == JobStatus.progress)
// job being executed, display progress
return Center(child: CircularProgressIndicator());
else if (snapshot.data.jobStatus == JobStatus.success)
Navigator.pop(context); // Problem here!
return Center(child: CircularProgressIndicator());
} else {
return DisplayForm();
}
});
我的行有问题:Navigator.pop(context); 因为在构建期间不允许导航。
如何进行此导航?
我当前的 dirty 解决方案是使用以下函数,但它很难看:
static void deferredPop(BuildContext context) async{
Future.delayed(
Duration(milliseconds: 1),
() => Navigator.pop(context)
);
}
【问题讨论】:
-
您回答了自己的问题。您无法在构建期间导航。我想说使用
StreamBuilder可能不是你想要的,因为 UI 实际上并不直接依赖于流的结果。 -
那怎么办?根据流的值,它可能需要重建或导航。
-
那怎么办?根据流的值,它可能需要重建或导航。 @Anion47
标签: flutter dart flutter-navigation