在flutter中使用来自不同窗口小部件的命名Navigator?

问题描述 投票:1回答:2

我需要使用另一个窗口小部件(屏幕)中的命名导航来导航到窗口小部件(屏幕)。这是MyHomePage小部件的正文

body: Navigator(
  key: _navigatorKey,
  initialRoute: '/',
  onGenerateRoute: (RouteSettings settings) {
    WidgetBuilder builder;

    switch (settings.name) {
      case '/':
        builder = (BuildContext context) => UIHomePage();
        break;
      case '/cart':
        builder = (BuildContext context) => UICartPage();
        break;
      case '/account':
        builder = (BuildContext context) => UIAccountPage();
        break;
      default:
        throw Exception('Invalid route: ${settings.name}');
    }

    return MaterialPageRoute(builder: builder, settings: settings, );
  },
),

我可以用PageRoutesbottomNavigationBar切换这些_navigatorKey.currentState.pushNamed(routeNames[tabItem]),其中routeNames是字符串['/', '/cart', '/account']的列表。效果很好。

现在,从UIAccountPage(),这里有一个名为'Cart'的ListTile,我希望在点击该特定图块时导航到UICartPage。我还希望使用其他几个图块导航到其他小部件(屏幕)。

要实现这一点,我是否必须在onGenerateRoute中扩展MyHomePage以适应其他路线,还是必须在某个地方创建另一个自定义导航器?我很矛盾。如果有人可以用简单的说明进行指导,那将是很棒的。

谢谢

编辑:另外,我也不知道setting在导航器中的作用,_navigatorKey是final _navigatorKey = GlobalKey<NavigatorState>()

flutter dart flutter-layout flutter-navigation
2个回答
1
投票

我使用Flutter还是很新的,但是我已经实现了这种方法,可以很好地用于路由。

class Main extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Temp Detector',
      initialRoute: '/',
      routes: {
        '/': (context) => AuthScreen(),
        '/register': (context) => SignInScreen(),
        '/login': (context) => LoginScreen(),
        '/home': (context) => HomeScreen(),
        '/config': (context) => ConfigScreen(),
      },
    );
  }
}

并且当我尝试转到另一个视图时,我使用:

Navigator.pushReplacementNamed(context, '/home');

第二个参数是路径中定义的名称。

希望它对您有帮助!


0
投票

1,我认为您应该尝试将BottomNavigationBarPageViewTabView一起使用。

2,关于您的问题,您可以尝试使用选项为UIAccountPage:]创建回调

  case '/account':
    builder = (BuildContext context) => UIAccountPage(onTapCart: () {
      _navigatorKey.currentState.pushNamed('/cart');
    });
    break;

和UIAccountPage

class UIAccountPage extends StatelessWidget {

  VoidCallback onTapCart;

  UIAccountPage({this.onTapCart});

  @override
  Widget build(BuildContext context) {
    .....
  }

}
© www.soinside.com 2019 - 2024. All rights reserved.