dart 使用go_router时,参数传递会导致错误

acruukt9  于 2023-09-28  发布在  Go
关注(0)|答案(2)|浏览(114)

我无法在使用Go路由器进行路由时访问state.queryParameters。在doc中给出了以下示例:

GoRoute(
  path: '/users',
  builder: (context, state) => const UsersScreen(filter: state.queryParameters['filter']),
)

以下是我如何实现整个事情:

final GoRouter _router = GoRouter(    
    routes: [
      GoRoute(
          path: "/",
          builder: (context, state) => const Dashboard(),
          routes: [
       
        // 1. pathParameter
        GoRoute(path: "profile/:name", builder: (context, state) => Profile(
          name: state.pathParameters["name"]!
        )),
        // 2. queryParameter
        GoRoute(path: "settings", builder: (context, state) => Settings(
            name: state.queryParameters['name']!
        )),
      ]),
    ]
  );

虽然它可以很好地使用pathParameter,但是state.queryParameters不能被访问。我收到以下错误消息:Error: The getter 'queryParameters' isn't defined for the class 'GoRouterState'.
我用go_router: 10.1.2。有人知道该怎么做吗?

laawzig2

laawzig21#

最新的go_router包有一个突破性的变化,它用uri替换了访问位置、queryParamters和queryParameterAll
所以与其像这样访问queryParamters

GoRoute(path: "profile/:name", builder: (context, state) => Profile(
  name: state.pathParameters["name"]!
)),
state.queryParameters['name']!

它已被替换为

GoRoute(path: "profile/:name", builder: (context, state) => Profile(
  name: state.uri.queryParameters["name"]!
)),

你可以在这里阅读更多go_router_migration_guide

uurv41yg

uurv41yg2#

有一个中断change on go_router v10
你需要改变就像

builder: (context, state) {
       final Map<String, String> queryParameters = GoRouterState.of(context).uri.queryParameters;

相关问题