3

我需要将一些参数发送到命名路由。我想做类似的事情:

Navigator.pushNamed('/route/1');

或者

Navigator.pushNamed('/route?param1=1');

我不知道是否有办法做到这一点,我正在使用带有路由器的 MaterialApp。

4

2 回答 2

8

第一种方式是我在我的应用程序中使用的方式。

Navigator.pushNamed('/route/1');

不要忘记使用 onGenerateRoute 并传递值。我的应用程序示例:

routes: {
        '/': (BuildContext context) => AuthPage(),
        '/products': (BuildContext context) => ProductsPage(''),
        '/admin': (BuildContext context) =>
            ProductsAdminPage(_addProduct, _deleteProduct),
      },
      onGenerateRoute: (RouteSettings settings) {
        final List<String> pathElements = settings.name.split('/');
        if (pathElements[0] != '') {
          return null;
        }
        if (pathElements[1] == 'product') {
          return MaterialPageRoute<bool>(
            builder: (BuildContext context) => ProductPage(pathElements[2]),
          );
        }
        return null;
      },
      onUnknownRoute: (RouteSettings settings) {
        return MaterialPageRoute(
            builder: (BuildContext context) => ProductsPage('Error'));
      },
于 2019-01-15T00:44:04.673 回答
2

要直接回答您的问题,请参阅这个重复的问题:如何将非字符串数据传递给 Flutter 中的命名路由?

但是,大多数时候最好的方法是不在路由之间传递参数,而是使用 app-state-management。例如 Redux 或 Bloc。通常在第一个屏幕中修改状态,然后导航到第二个屏幕并读取状态。这样做的好处是能够保持状态并以关闭时的相同状态重新打开您的应用程序。有关状态管理的更多信息,请参阅官方文档

于 2019-01-14T22:48:37.323 回答