Flutter:在弹出对话框中导航

Flutter: Navigation in a pop-up dialog

是否可以在弹出窗口中使用单独的导航器 window?单独的 BuildContext?

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

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

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

我想在弹出对话框中有单独的导航,以便包含的应用程序导航器仅在弹出对话框中工作。

实现此目标的 preferred/possible 方法是什么?

这是一个小例子: Soure code

示例包含 2 个应用程序(APP1 和 APP2)。 APP2 包含 APP1 并在弹出对话框中显示它。

您可以通过在对话框组件中添加 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 要点,您可以在 DartPad.dev 上 运行 这样您就可以明白我的意思了。您不必创建两个应用程序;只需将您的应用程序分发到两个主要小部件中,子页面位于每个主要小部件的子页面下;参见要点 https://gist.github.com/romanejaquez/d769e6e766fbacb2f5c166dd3bceab51。 运行 它在 DartPad.dev.