【问题标题】:Flutter Bloc Cubit Navigator Problem BlocProvider.of() called with a context that does not contain a Bloc/Cubit of type CityCubitFlutter Bloc Cubit Navigator Problem BlocProvider.of() 调用的上下文不包含 CityCubit 类型的 Bloc/Cubit
【发布时间】:2021-05-23 12:51:13
【问题描述】:

我在 Flutter 项目中使用 Bloc (Cubit) 进行数据管理。我在导航操作中收到以下错误。

BlocProvider.of() 调用的上下文不包含 CityCubit 类型的 Bloc/Cubit。 从传递给 BlocProvider.of() 的上下文开始找不到祖先。

当我从登录表单转到我的城市列表页面时,我收到上述错误。 刷新项目后错误消失。列出了城市。但是,当我再次登录并重定向我时,我得到了一个错误。

main.dart --> MultiBlocProvider[providers: BlocProvider, BlocProvider]

借助按钮“BlocProvider.of (context) .signIn (user);”登录。

自动页面

BlocConsumer<AuthCubit, AuthState>(builder: (context, state) {
              return _buildUI();
            }, listener: (context, state) {
              if (state is AuthLoading) {
                return Center(
                  child: CircularProgressIndicator(),
                );
              }
              if (state is AuthLoaded) {
                Navigator.of(context).push(
                    MaterialPageRoute(builder: (context) => CityListPage()));
              }
              if (state is AuthError) {
                Scaffold.of(context)
                    .showSnackBar(SnackBar(content: Text(state.message)));
                print(state.message);
              }
            })

城市列表页面

List<CityModel> cities = [];        
@override
          void initState() {
            BlocProvider.of<CityCubit>(context).getAll();
            super.initState();
          }
    Widget build(BuildContext context) {
        return Scaffold(
            appBar: AppBar(
              title: Text("Hello"),
            ),
            body: BlocConsumer<CityCubit, CityState>(builder: (context, state) {
              if (state is CityInitial) {
                return Text("....");
              }
              if (state is CityLoading) {
                return Center(
                  child: CircularProgressIndicator(),
                );
              }
              if (state is CitiesLoaded) {
                cities.addAll(state.cities);
              }
              return _buildCities();
            }, listener: (context, state) {
              if (state is CityError) {
                print("Error");
              }
            }));
      }

【问题讨论】:

    标签: flutter bloc cubit


    【解决方案1】:
    if (state is AuthLoaded) {
                    Navigator.of(context).push(
                        MaterialPageRoute(builder: (context) => CityListPage()));
                  }
    

    这里使用 BlocProvider 或 BlocProvider.value

    类似下面的东西,

    if (state is AuthLoaded) {
                        Navigator.of(context).push(
                            MaterialPageRoute(builder: (context) => BlocProvider(
                create: (context) => CityCubit(),
                child: CityListPage(),
              )));
                      }
    

    【讨论】:

      猜你喜欢
      • 2021-04-26
      • 2021-05-25
      • 2021-02-08
      • 2020-08-21
      • 2020-12-30
      • 2021-01-15
      • 2020-12-26
      • 2020-10-16
      • 2020-05-20
      相关资源
      最近更新 更多