首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >颤振MultiProvider未找到

颤振MultiProvider未找到
EN

Stack Overflow用户
提问于 2021-12-24 11:44:51
回答 2查看 463关注 0票数 0

错误:无法在此AuthenticationWrapper Widget之上找到正确的提供程序

这是因为您使用了不包括您选择的提供者的BuildContext。有几种常见的情况:

  • ,您在main.dart中添加了一个新的提供程序,并执行了热重加载。若要修复,请执行热重新启动.

您要读取的提供程序

  • 处于不同的路径。

提供者被“限定范围”。因此,如果在路由中插入提供程序,则其他路由将无法访问该提供程序。

  • 您使用了一个BuildContext,它是您要读取的提供程序的祖先。

确保AuthenticationWrapper位于您的多提供者/提供程序之下。这通常发生在您创建一个提供程序并试图立即读取它()时。

代码语言:javascript
复制
    import 'package:firebase_auth/firebase_auth.dart';
    import 'package:firebase_core/firebase_core.dart';
    import 'package:flutter/material.dart';
    import 'package:flutter/services.dart';
    import 'package:google_fonts/google_fonts.dart';
    import 'package:park_app/app_styles.dart';
    import 'package:provider/provider.dart';
    import 'package:shared_preferences/shared_preferences.dart';
    import './views/pages.dart';
    import 'views/authentication/authentication_service.dart';
    import 'Home_Page.dart';
    
    bool? seenOnboard;
    
    Future<void> main() async {
      WidgetsFlutterBinding.ensureInitialized();
      await Firebase.initializeApp();

      // to show status bar
      SystemChrome.setEnabledSystemUIOverlays(
          [SystemUiOverlay.bottom, SystemUiOverlay.top]);
      // to load onboard for the first time only
      SharedPreferences pref = await SharedPreferences.getInstance();
      seenOnboard = pref.getBool('seenOnboard') ?? false; //if null set to false
    
      runApp(MyApp());
    }
    
    class MyApp extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        return MultiProvider(
          providers: [
            Provider<AuthenticationService>(
              create: (_) => AuthenticationService(FirebaseAuth.instance),
            ),
            StreamProvider(
                initialData: null,
                create: (context) =>
                    context.read<AuthenticationService>().authStateChanges),
          ],
          child: MaterialApp(
            debugShowCheckedModeBanner: false,
            title: 'Park App',
            theme: ThemeData(
              textTheme: GoogleFonts.manropeTextTheme(
                Theme.of(context).textTheme,
              ),
              primarySwatch: Colors.blue,
              scaffoldBackgroundColor: kScaffoldBackground,
            ),
            home: seenOnboard == true ? AuthenticationWrapper() : OnBoardingPage(),
          ),
        );
      }
    }
    
    class AuthenticationWrapper extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        final firebaseUser = context.watch<User>();
    
        if (firebaseUser != null) {
          return HomePage();
        }
        return LoginPage();
      } 
    }
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-12-24 11:59:59

确保在StreamProvider上指定泛型类型

代码语言:javascript
复制
StreamProvider<User?>(
  ...
)

请注意,您已经将null设置为initialData,因此您的小部件可能需要处理null用户。意思是你需要做:

代码语言:javascript
复制
final user = context.watch<User?>()
票数 0
EN

Stack Overflow用户

发布于 2022-06-19 23:43:26

通过运行以下命令来安装提供程序:

flutter pub add provider,然后在main.dart文件中导入import 'package:provider/provider.dart';

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70472551

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档