0

我在 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");
              }
            }));
      }
4

1 回答 1

0
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(),
          )));
                  }
于 2022-01-04T09:00:07.633 回答