【问题标题】:Flutter: go_router how to pass multiple parameters to other screen?Flutter:go_router如何将多个参数传递给其他屏幕?
【发布时间】:2022-08-21 17:14:13
【问题描述】:

在香草颤振中,我们将多个参数传递给其他屏幕,如下所示:

    Navigator.of(context).push(MaterialPageRoute(
                                    builder: (_) => CatalogFilterPage(
                                          list: list,
                                          bloc: bloc,
                                        )))

非常简单和容易。我可以传递 2 个需要的参数,列表和块。在 CatalogFilterPage 中使用后。

现在切换到 go_router 并查看documentation 后,我似乎无法找到如何传递多个数据。即使传递单个对象似乎也不是很好:

    onTap: () =>
              context.pushNamed(\'SelectedCatalogItem\', extra: list[index]),

在路由器中,我必须使用强制转换来设置正确的类型:

    builder: (context, state) => SelectedCatalogItem(
                    item: state.extra as ListItemsModel,
                  ),

单个参数很好。但现在我不知道如何传递多个参数。我该怎么做?甚至将参数(例如模型)作为额外的参数传递是正确的方法吗?

附言我知道您可以将参数传递为context.pushNamed(\'CatalogFilterPage\', params: ___),但params 的类型为 Map<String, String> 女巫不让我通过模型

标签: flutter dart routes


【解决方案1】:

从 go_router 文档中我们可以看到:

如果您想简单地传递,额外的对象很有用单个对象没有通过 URI 传递对象标识符并从存储中查找对象的构建器函数。

您可以做的是将“SelectedCatalogItem”的 ID/名称作为参数并稍后形成对象(如果可能)。 'params' 参数让我们可以传入多个字段

onTap: () => context.pushNamed('SelectedCatalogItem',
                  params: {"id":list[index].id.toString(),"name":list[index].name}),

然后在 GoRouter 的 builder 函数中我们可以这样做:

GoRoute(
        path: 'selectedCatalogItem/view/:id/:name',
        name: 'SelectedCatalogItem',
        builder: (context, state){
          int id = int.parse(state.params['id']!);
          String name = state.params['name']!;
          // use id and name to your use...
        });

【讨论】:

    猜你喜欢
    • 2019-07-17
    • 1970-01-01
    • 2014-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-27
    • 1970-01-01
    相关资源
    最近更新 更多