【问题标题】:Flutter Error : Could not find the correct Provider<StateStreamable<Object?>> above this BlocBuilder<StateStreamable<Object?>Flutter 错误:在此 BlocBuilder<StateStreamable<Object?> 上方找不到正确的 Provider<StateStreamable<Object?>>
【发布时间】:2022-01-08 21:22:51
【问题描述】:

我正在尝试实现一个用于在页面之间进行导航的 Cubit。 我的第一次尝试是在我的背景屏幕上实现它,但我在尝试这样做时遇到了这个错误:

“错误:在此 BlocBuilder, Object?> Widget 上方找不到正确的 Provider>”

我不明白为什么它找不到正确的上下文,因为我的 BlocBuilder 在小部件树中的 BlocProvider 之上...

代码如下:

import 'package:connectivity_plus/connectivity_plus.dart';
import 'package:firebase_core/firebase_core.dart';
import 'package:flexmes_mobile_app/buisness_logic/cubit/internet_cubit.dart';
import 'package:flexmes_mobile_app/buisness_logic/utility/app_bloc_observer.dart';
import 'package:flexmes_mobile_app/config/themes.dart';
import 'package:flexmes_mobile_app/ui/screens/auth_screen.dart';
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:responsive_sizer/responsive_sizer.dart';
import 'buisness_logic/cubit/navigation_cubit.dart';
import 'config/app_router.dart';

void main() {
  WidgetsFlutterBinding.ensureInitialized();
  Firebase.initializeApp();
  BlocOverrides.runZoned(
        () => runApp(MyApp()),
    blocObserver: AppBlocObserver(),
  );
}

class MyApp extends StatelessWidget {
  final AppRouter _appRouter = AppRouter();

  MyApp({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return MediaQuery(
      data: const MediaQueryData(),
      child: ResponsiveSizer(
          builder: (context, orientation, deviceType) {
            return MultiBlocProvider(
              providers: [
                BlocProvider<InternetCubit>(
                  create: (context) => InternetCubit(connectivity: Connectivity()),
                ),
                BlocProvider<NavigationCubit>(
                  create: (context) => NavigationCubit(),
                ),
              ],
              child: MaterialApp(
                title: 'Flexmes Mobile App',
                //Generate routes for navigation
                onGenerateRoute: _appRouter.generateRoute,
                //Take the correct theme to apply to the screens
                theme: appThemeData[AppTheme.authTheme],
                //Build the default widget, the "background" widget
                builder: (context, child) {
                  //Instantiate the Cubits
                  BlocProvider.of<InternetCubit>(context);
                  BlocProvider.of<NavigationCubit>(context);
                  return BlocBuilder(
                    builder: (BuildContext context, state) {
                      if (state is AuthenticationInitial){
                        return AuthScreen(child: child);
                      }
                      return Container();
                    },

                  );
                },
              ),
            );
          }
      ),
    );
  }
}

有人知道为什么吗? :)

感谢您的回答!

克里斯

【问题讨论】:

  • blocbuilder 有什么用?两个肘尺中的哪一个是该集团的建造者应该使用的?
  • 哦,bloc buidler 是为 NavigationCubit 准备的
  • 是的,我只需要输入BlocBuilder&lt;NavigationCubit,NavigationState&gt; 就可以了,我的错^^

标签: flutter builder flutter-bloc cubit


【解决方案1】:
  • 有用的是在 BlocBuilder 中编写 Cubit 和 State 的类型 所以从那:

返回 BlocBuilder( 构建器:(BuildContext 上下文,状态){

                  if (state is AuthenticationInitial)

                                            {

                    return AuthScreen(child: child);

                  }

                  return Container();

                },

它将是:

return BlocBuilder(

          builder: (BuildContext context, state) {

                  if (state is AuthenticationInitial)

                                            {

                    return AuthScreen(child: child);

                  }

                  return Container();

                },

这对我有用

【讨论】:

    猜你喜欢
    • 2021-04-29
    • 2021-07-16
    • 2020-09-25
    • 2021-09-28
    • 1970-01-01
    • 2021-12-19
    • 2021-09-29
    • 2021-02-04
    • 2021-01-31
    相关资源
    最近更新 更多