EpisodeDetailsRouteArgs 不能为 null,因为它有必需的参数

alp*_*hin 2 router routes flutter

我得到 EpisodeDetailsRouteArgs 不能为空,因为它有一个必需的参数这个错误,即使我传递了参数。

这是我的墨水池小部件:

   onTap: () {
              AutoRouter.of(context).replace(EpisodeDetailsRoute(
                podcastImageUrl: podcastImageUrl,
                podcastName: podcastName,
                podcastOwner: podcastOwner,
                podcastEpisodes: podcastEpisodes,
              ));
            },
Run Code Online (Sandbox Code Playgroud)

我的路由器:

@MaterialAutoRouter(
  replaceInRouteName: 'Page,Route',
  routes: <AutoRoute>[
    AutoRoute(page: IntroductionPage),
    AutoRoute(
      page: LoginPage,
    ),
    AutoRoute(page: HomePage),
    AutoRoute(page: EpisodeDetailsPage, initial: true),
  ],
)
class $AppRouter {}
Run Code Online (Sandbox Code Playgroud)

我的剧集详细信息页面:

class EpisodeDetailsPage extends StatelessWidget {
  const EpisodeDetailsPage({
    Key? key,
    required this.podcastImageUrl,
    required this.podcastName,
    required this.podcastOwner,
    required this.podcastEpisodes,
  }) : super(key: key);

  final String podcastImageUrl;
  final String podcastName;
  final String podcastOwner;
  final String podcastEpisodes;
  @override
  Widget build(BuildContext context) {
    return const Scaffold();
  }
}
Run Code Online (Sandbox Code Playgroud)

我使用最新版本的auto_route。你能帮助我吗 ?

Da2*_*2ny 6

我遇到了同样的问题,我们将根据我的问题回复这个问题。

该错误来自路由器文件和初始参数。

Router 文件,此处的 PageSplashScreen 具有初始类型,因为它是应用程序上显示的第一个屏幕,并且不需要任何参数,因为它是初始页面:

@MaterialAutoRouter(
  replaceInRouteName: 'Page,Route',
  routes: <AutoRoute>[
    AutoRoute<dynamic>(
      page: PageSplashScreen,
      path: '/',
      initial: true,
    ),
    AutoRoute<dynamic>(
      page: PageCapsule,
      path: capsulePath,
      children: homeTabRouter,
    ),
  ],
)
Run Code Online (Sandbox Code Playgroud)

因此,如果我们将问题放在子路由器上,如果初始值设置为 true,auto_route 将不会期望任何参数,即使需要一些参数。所以你只需要在非initial且需要接收参数的页面上删除initial: true即可。就像下面这样。

当前 homeTabRouter 变量:

const homeTabRouter = [
  AutoRoute<dynamic>(
    path: 'firstPage',
    page: FirstPage,
    initial: true,
  ),
  AutoRoute<dynamic>(
    path: 'secondPage',
    page: SecondPage,
    initial: true,
  ),
];
Run Code Online (Sandbox Code Playgroud)

修改后,homeTabRouter变量:

const homeTabRouter = [
  AutoRoute<dynamic>(
    path: 'firstPage',
    page: FirstPage,
  ),
  AutoRoute<dynamic>(
    path: 'secondPage',
    page: SecondPage,
  ),
];
Run Code Online (Sandbox Code Playgroud)

因此,现在如果您想将参数从 CapsulePage 传递到 FirstPage 或 SecondPage,这是可能的,因为它们不再是初始的。