在小部件的构建方法中执行导航? -颤抖

时间:2020-02-13 17:14:44

标签: flutter dart flutter-navigation

常见问题:如何在小部件的构建方法中执行导航?

  • 我正在开发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); 因为在构建期间不允许导航。

我该如何导航?

我目前的肮脏解决方案正在使用以下功能,但是很丑陋:

  static void deferredPop(BuildContext context) async{
    Future.delayed(
      Duration(milliseconds: 1),
        () => Navigator.pop(context)
     );
   }

2 个答案:

答案 0 :(得分:1)

您可以添加以下回调,以在build方法完成后使用以下代码行执行:

WidgetsBinding.instance.addPostFrameCallback((_) => Navigator.pop(context));

答案 1 :(得分:0)

“因为在构建期间不允许导航。”话虽如此,您应该考虑创建一个单独的函数,该函数将接收输入内容,并考虑是否要弹出该屏幕。