flutter - 在小部件的构建方法中执行导航?- 颤动
问题描述
快速问题:如何在小部件的构建方法中执行导航?
- 我正在开发一个 Flutter 应用程序。
- 我使用 Bloc 架构。
我有一个带有创建表单的屏幕。当用户按下按钮时,它会调用 REST api。在执行呼叫时,我会显示一个循环进度。当进度结束时,我希望弹出屏幕(使用导航)。
为了显示作业状态,我在 bloc 中使用 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); 因为在构建期间不允许导航。
我该怎么做这个导航?
我当前的肮脏解决方案是使用以下功能,但它很难看:
static void deferredPop(BuildContext context) async{
Future.delayed(
Duration(milliseconds: 1),
() => Navigator.pop(context)
);
}
解决方案
您可以使用这行代码添加要在构建方法完成后执行的回调:
WidgetsBinding.instance.addPostFrameCallback((_) => Navigator.pop(context));
推荐阅读
- excel - 如何复制并粘贴到下一行
- ios - 在乐器中录音时应用程序崩溃
- oracle - 如何在 Oracle 报表中每页打印一个重复帧记录?
- wordpress - 我必须在 woocommerce 中删除或隐藏此文本“抱歉,没有符合您选择的产品。请选择其他组合。”
- python - 如何处理具有两个文本输入的警报/弹出窗口?
- python - 如何从嵌套字典中获取数据?
- javascript - 如何通过单击按钮将 d3.js 图形的 csv 数据集切换到另一个 csv
- javascript - 如何在three.js中仅渲染最接近的透明对象深度?
- dependency-injection - 在负载测试期间,通过构造函数类对象注入的 DI 在控制器中解析为 null
- librt - librt.so 是什么?我怎样才能直接使用它?