我是 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();
虽然这种有效,但感觉不对(可能更多,但主要)有两个原因:
模态流不需要关心它是从哪里呈现的。现在它假设它是在根导航器上显示的,它现在可以工作,但将来可能会中断。
模式流中的第一个屏幕不会自动在脚手架应用栏中获得关闭按钮。我的印象是,如果事情做得正确,您将免费获得它。这是正确的吗?
所以我想我的问题是:如果我使用不是根导航器的导航器来呈现模态流,我如何才能获得对呈现导航器的引用以关闭流?或者我这样做是不是采用了完全错误的方法?
脚注:
- 为简洁起见删减了代码示例
- 我使用的是 iOS 术语(存在和解散),对此深表歉意!
- 到目前为止,我只在 iOS 模拟器上测试过这个
最佳答案
很简单。
Navigator.of(context).pop();
不要因为对自己施加太大压力而感到困惑。
关于flutter - 呈现和关闭模态小部件流程的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59348183/