【问题标题】:Go_router pass an object/bloc to new routeGo_router 将对象/块传递给新路由
【发布时间】:2022-12-17 02:09:41
【问题描述】:

我曾经像这样将 BLoC 实例传递给新路由:

Navigator.of(context).push<void(FavoriteDetailPage.route(_favoriteBloc));
class FavoriteDetailPage extends StatelessWidget {
  const FavoriteDetailPage({super.key});
  

  static Route route(FavoriteBloc favoriteBloc) {

    return MaterialPageRoute<void>(
      settings: const RouteSettings(name: 'favorite_detail'),
      builder: (_) => BlocProvider.value(
        value: favoriteBloc,
        child: FavoriteDetailPage(),
      ),
    );
  }

 ...

}

我正在将我的应用程序路由迁移到go_router,但找不到相同的方法。 -> 为新路由提供相同的 bloc 实例,因为 go_router parameters 只能是 String

我可以在我的MaterialApp 上方提供 BLoC 以使其可供我的所有应用程序使用,但我不想将它提供给我的所有应用程序(只是那两条子路线)

【问题讨论】:

    标签: flutter flutter-navigation flutter-routes flutter-go-router gorouter


    【解决方案1】:

    context.goNamed()中使用extra参数

     GoRoute(
            path: '/sample',
            name: 'sample',
            builder: (context, state) {
             FavoriteBloc favoriteBloc = state.extra as FavoriteBloc ; // -> casting is important
              return FavoriteDetailPage(favoriteBloc : favoriteBloc );
            },
          ),
    

    接收为:

    class FavoriteDetailPage extends StatelessWidget {
      FavoriteBloc favoriteBloc;
      const FavoriteDetailPage({super.key,required this.favoriteBloc});
     }
    

    【讨论】:

      猜你喜欢
      • 2019-12-15
      • 1970-01-01
      • 2019-08-27
      • 1970-01-01
      • 2023-03-26
      • 2016-10-15
      • 2022-01-17
      • 2019-06-30
      • 1970-01-01
      相关资源
      最近更新 更多