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.
是否可以在弹出窗口中使用单独的导航器 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.