flutter - 呈现和关闭模态小部件流程的正确方法是什么?

标签 flutter architecture navigation

我是 Flutter 的新手,来自 iOS 开发。我正在尝试创建一个可以从应用程序中的任何位置启动的模态小部件流/旅程,但我无法掌握如何正确呈现和关闭模态流。

每当我想在应用程序的某处呈现模态流时,都会调用此函数:

Widget launchModalFlow() {
  return Navigator(
    onGenerateRoute: (settings) => MaterialPageRoute(
      settings: settings,
      builder: (BuildContext _) => FirstStepScreen(
        didComplete: (context) {
          _pushSecondScreen(context); // this is a method which uses Navigator.of(context) to push another widget onto the navigation stack
        },
      ),
    ),
  );
}

它是这样调用的:

Navigator.of(context, rootNavigator: true).push(new MaterialPageRoute(
  builder: (BuildContext context) {
    return launchModalFlow();
  },
  fullscreenDialog: true,
));

每当我想关闭模态流时,我都会在模态流中执行此操作,例如,当您点击应用栏中的“关闭”或到达流程末尾时:

Navigator.of(context, rootNavigator: true).pop();

虽然这种有效,但感觉不对(可能更多,但主要)有两个原因:

  1. 模态流不需要关心它是从哪里呈现的。现在它假设它是在根导航器上显示的,它现在可以工作,但将来可能会中断。

  2. 模式流中的第一个屏幕不会自动在脚手架应用栏中获得关闭按钮。我的印象是,如果事情做得正确,您将免费获得它。这是正确的吗?

所以我想我的问题是:如果我使用不是根导航器的导航器来呈现模态流,我如何才能获得对呈现导航器的引用以关闭流?或者我这样做是不是采用了完全错误的方法?

脚注:

  1. 为简洁起见删减了代码示例
  2. 我使用的是 iOS 术语(存在和解散),对此深表歉意!
  3. 到目前为止,我只在 iOS 模拟器上测试过这个

最佳答案

很简单。

Navigator.of(context).pop();

不要因为对自己施加太大压力而感到困惑。

关于flutter - 呈现和关闭模态小部件流程的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59348183/

相关文章:

dart - 扩展列以适合屏幕宽度

plugins - 如何从我的简单 .dart 文件创建一个插件以在 Flutter 中使用?

flutter - 如何使用Flutter更改TextFormField中边框线的颜色

java - kubernetes 中 Pod 之间基于 Cookie 的 session 持久性

architecture - 识别 "forms over data"应用与 DDD 应用

管道架构中的 Java 泛型

android - 为 Android 编译时,iOS 的 dart 代码会被删除吗?

Sharepoint 2013 - 无法从导航中隐藏子网站

带有复选框的 Drupal 7 向下钻取菜单 - 类似于 Amazon 的左侧菜单

android - 导航架构组件 - 将参数数据传递给 startDestination