Flutter:弹出对话框中的导航



是否可以在弹出窗口中使用单独的Navigator?单独的BuildContext?

我有一个正在工作的应用程序(APP1(,我想在新的应用程序中显示它(例如,按下按钮打开现有的应用程序(。APP1有多个页面。

我能够将APP1添加为APP2的依赖项,并在弹出对话框(警报对话框(中加载主页。

当我尝试在APP1中导航时,会出现此问题。如果我点击APP1中的按钮,它会更改整个新应用程序中的页面。

我希望在弹出对话框中有单独的导航,这样所包含的应用程序Navigator只能在弹出对话框内工作。

实现这一目标的首选/可能方式是什么?

这里有一个小例子:Soure代码

该示例由2个应用程序(APP1和APP2(组成。APP2包括APP1,并将其显示在弹出对话框中。

您可以通过在对话框组件中添加Navigator小部件来添加嵌套的Navigator(如果您在Flutter中使用Navigator 1.0(,这样您就可以管理对话框本身中的页面导航,创建嵌套路线,并仅在导航堆栈中导航。

你可以做一些类似的事情:

class NestedDialog extends StatelessWidget {

@override
Widget build(BuildContext context) {
return Scaffold(
body: Navigator(
key: <ADD_UNIQUE_KEY>, // add a unique key to refer to this navigator programmatically
initialRoute: '/',
onGenerateRoute: (RouteSettings settings) {
// here you return your own page widgets wrapped
// inside a PageRouteBuilder
}
)
);
}
}

然后,您甚至可以使用Flutter自己的showDialog并加载自定义对话框小部件,如下所示:

showDialog(context: context,
barrierDismissible: true,
builder: (BuildContext cxt) {
return AlertDialog(
content: NestedDialog()
);
});

一些类似的东西。试试看。这里有一个Github Gist,你可以在DartPad.dev上运行,这样你就可以明白我的意思了。您不必创建两个应用程序;只需将您的应用程序分发到两个主要小部件中,子页面位于每个主要小部件的子页面下方;见要点https://gist.github.com/romanejaquez/d769e6e766fbacb2f5c166dd3bceab51.在DartPad.dev.上运行

最新更新