如何使用 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' 执行失败