如何使用 firebase_auth 和 provider 检测身份验证更改

Posted

技术标签:

【中文标题】如何使用 firebase_auth 和 provider 检测身份验证更改【英文标题】:How to detect auth changes with firebase_auth and provider 【发布时间】:2020-04-16 03:54:26 【问题描述】:

我的Auth 提供程序类中有这个简单的登录方法

  Future login(String email, String password) async 
    try 
      AuthResult result = await _firebaseAuth.signInWithEmailAndPassword(
          email: email, password: password);
      FirebaseUser user = result.user;
      var _tokenServer = await user.getIdToken();
      _token = _tokenServer.token;
      _userId = user.uid;
      notifyListeners();
      print("logged in");
      return user.uid;
     catch (e) 
      print(e);
    
  

还有这个吸气剂

 bool get isAuth 
    return _token != null;
  

这是我的主要工作

class MyApp extends StatelessWidget 
  @override
  Widget build(BuildContext context) 
    return MultiProvider(
      providers: [
        ChangeNotifierProvider.value(
          value: Auth(),
        ),
      ],
      child: Consumer<Auth>(
        builder: (ctx, auth, _) => MaterialApp(
          title: 'Flutter Demo',
          // theme: ThemeData(
          //   // primarySwatch: Colors.blue,
          // ),
          theme: ThemeData.dark(),
          home: auth.isAuth ? HomeScreen() : LoginScreen(),
        ),
      ),
    );
  

如果我登录,我可以获得所有数据(令牌、ID 等),但页面不会改变,我会停留在登录页面。 我做错了什么?

编辑: 我现在看到我可以重定向到主屏幕,但我需要按返回按钮才能进入主屏幕

【问题讨论】:

【参考方案1】:

实际上,您不会将整个应用程序包装在 Consumer 中。 home 属性不会刷新以更改主路由。您可以改为这样做。

例子:

class MyApp extends StatelessWidget 
  @override
  Widget build(BuildContext context) 
    return MultiProvider(
      providers: [
        ChangeNotifierProvider.value(
          value: Auth(),
        ),
      ],
      child: MaterialApp(
        title: 'Flutter Demo',
        // theme: ThemeData(
        //   // primarySwatch: Colors.blue,
        // ),
        theme: ThemeData.dark(),
        home: Consumer<Auth>(
          builder: (ctx, auth, _) 
            return auth.isAuth ? HomeScreen() : LoginScreen();
          ,
        ),
      ),
    );
  

希望有帮助!

【讨论】:

以上是关于如何使用 firebase_auth 和 provider 检测身份验证更改的主要内容,如果未能解决你的问题,请参考以下文章

如何从 firebase_auth 测试“signInWithEmailAndPassword”

如何修复 Xcode 中找不到的“firebase_auth/FirebaseAuthPlugin.h”文件?

错误:名称“用户”在库“package:firebase_auth/firebase_auth.dart”和“package:quizmaker/models/user.dart”中定义

Flutter 和 Firebase:任务 ':firebase_auth:compileDebugJavaWithJavac' 执行失败

Flutter 中的 cloud_firestore 和 firebase_auth 兼容性问题

Flutter:firebase_auth 好像不行,怎么授权?