繁体   English   中英

在 flutter 中使用来自不同小部件的命名导航器?

[英]Using named Navigator from different widgets in flutter?

我需要使用来自另一个小部件(屏幕)的命名导航导航到一个小部件(屏幕)。 这是MyHomePage Widget 的主体

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, );
  },
),

我可以使用_navigatorKey.currentState.pushNamed(routeNames[tabItem])bottomNavigationBar切换这些PageRoutes ,其中routeNames是字符串列表['/', '/cart', '/account'] 这工作正常。

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

为此,我是否必须在onGenerateRoute中扩展MyHomePage以适应其他路线,或者我必须在某处创建另一个自定义导航器? 我很矛盾。 如果有人可以用一个简单的插图来指导,那就太棒了。

谢谢

编辑:我也不知道 Navigator 中的setting和 _navigatorKey 是final _navigatorKey = GlobalKey<NavigatorState>()

我是使用 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(),
      },
    );
  }
}

当我尝试 go 到另一个视图时,我使用:

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

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

希望它对你有帮助!

1,我认为您应该尝试使用PageViewTabViewBottomNavigationBar

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) {
    .....
  }

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM