NavigationBody 内的导航 fluent_ui Flutter
Navigation inside NavigationBody fluent_ui Flutter
我正在使用 fluent_ui
包编写一个 flutter windows 应用程序。
我有带 NavigationPage 和 NavigationBody 项的 NavigationView。
在某些 NavigationBody 项上,我想导航到另一个页面(例如从页面 app/cars/ 到 app/cars/id)但保持相同的 NavigationPane 状态(这意味着只改变一个NavigationBody 小部件)。
我怎样才能做到这一点?仅通过使用某种 SetState()
完全改变小部件的内容或使用 Navigator 的某些解决方案?
Basic page structure:
- NavigationView
- NavigationPane
- NavigationBody
所以。我找到了解决这个问题的方法。我的解决方案基于使用 Navigator 作为基本小部件。在作为 NavigationBody 项目的 NavigationView 中,使用的不是具体页面(小部件),而是负责内部导航的 Navigator。因此 Push() 方法仅更改 NavigationView 的 NavigationBody 而不是整个 window 应用程序。
这是此的代码示例。希望有人会觉得这有帮助:
nav_view_page.dart
NavigationView(
appBar: //some app bar
pane: // your NavigationPane
content: NavigationBody(
index: _selectedIndex,
children: [
//some other body items
CarsPageNavigator(
navigatorKey: GlobalKey<NavigatorState>(),
carsController: widget.carsController,
), //this is our navigator
],
),
);
custom_navigator.dart
class CarsPageNavigator extends StatelessWidget {
const CarsPageNavigator(
{Key? key, required this.navigatorKey, required this.carsController})
: super(key: key);
final GlobalKey<NavigatorState> navigatorKey;
final CarsController carsController;
@override
Widget build(BuildContext context) {
return Navigator(
key: navigatorKey,
initialRoute: '/car',
onGenerateRoute: (RouteSettings routeSettings) {
return FluentPageRoute(
settings: routeSettings,
builder: (context) {
return getPage(routeSettings.name);
});
});
}
Widget getPage(String? url) {
switch (url) {
case CarsManagementPage.routeName:
{
return CarsManagementPage(carsController: carsController);
}
case CarManagementPage.routeName:
return CarManagementPage(controller: carsController);
default:
return CarsManagementPage(carsController: carsController);
}
}
}
在此代码中的 OnGenerateRoute 方法中 returns 您要导航到的页面。
要从某个内页导航到其他页面,请使用 pushNamed(或 Navigator 的其他命名推送方法):
Navigator.pushNamed(context, CarManagementPage.routeName, arguments: car);
小提示:跳过一些“基本”代码以使答案更小
我正在使用 fluent_ui
包编写一个 flutter windows 应用程序。
我有带 NavigationPage 和 NavigationBody 项的 NavigationView。
在某些 NavigationBody 项上,我想导航到另一个页面(例如从页面 app/cars/ 到 app/cars/id)但保持相同的 NavigationPane 状态(这意味着只改变一个NavigationBody 小部件)。
我怎样才能做到这一点?仅通过使用某种 SetState()
完全改变小部件的内容或使用 Navigator 的某些解决方案?
Basic page structure:
- NavigationView
- NavigationPane
- NavigationBody
所以。我找到了解决这个问题的方法。我的解决方案基于使用 Navigator 作为基本小部件。在作为 NavigationBody 项目的 NavigationView 中,使用的不是具体页面(小部件),而是负责内部导航的 Navigator。因此 Push() 方法仅更改 NavigationView 的 NavigationBody 而不是整个 window 应用程序。 这是此的代码示例。希望有人会觉得这有帮助: nav_view_page.dart
NavigationView(
appBar: //some app bar
pane: // your NavigationPane
content: NavigationBody(
index: _selectedIndex,
children: [
//some other body items
CarsPageNavigator(
navigatorKey: GlobalKey<NavigatorState>(),
carsController: widget.carsController,
), //this is our navigator
],
),
);
custom_navigator.dart
class CarsPageNavigator extends StatelessWidget {
const CarsPageNavigator(
{Key? key, required this.navigatorKey, required this.carsController})
: super(key: key);
final GlobalKey<NavigatorState> navigatorKey;
final CarsController carsController;
@override
Widget build(BuildContext context) {
return Navigator(
key: navigatorKey,
initialRoute: '/car',
onGenerateRoute: (RouteSettings routeSettings) {
return FluentPageRoute(
settings: routeSettings,
builder: (context) {
return getPage(routeSettings.name);
});
});
}
Widget getPage(String? url) {
switch (url) {
case CarsManagementPage.routeName:
{
return CarsManagementPage(carsController: carsController);
}
case CarManagementPage.routeName:
return CarManagementPage(controller: carsController);
default:
return CarsManagementPage(carsController: carsController);
}
}
}
在此代码中的 OnGenerateRoute 方法中 returns 您要导航到的页面。 要从某个内页导航到其他页面,请使用 pushNamed(或 Navigator 的其他命名推送方法):
Navigator.pushNamed(context, CarManagementPage.routeName, arguments: car);
小提示:跳过一些“基本”代码以使答案更小