如何保持登录活动Flutter Firebase



我在通过电子邮件或谷歌帐户在应用程序中保持登录活动时遇到了一些困难。我尝试过使用SharedPreferences方法,但没有取得多大成功。

这是登录按钮代码:

DefaultButton(
text: "Continuar",
press: () async {
if (_formKey.currentState.validate()) {
_formKey.currentState.save();
try {
KeyboardUtil.hideKeyboard(context);
UserCredential user = await FirebaseAuth.instance
.signInWithEmailAndPassword(
email: email,
password: password);               
Navigator.of(context).pushAndRemoveUntil( 
MaterialPageRoute(builder: (context) => Tabs()),  
(Route<dynamic> route) => false);
} on FirebaseAuthException catch (e) {
if (e.code == 'user-not-found') { 
Fluttertoast.showToast(
msg: "Nenhum usuário encontrado para esse e-mail.");
print('Nenhum usuário encontrado para esse e-mail.');
} else if (e.code == 'wrong-password') {
Fluttertoast.showToast( 
msg: "Senha errada fornecida para esse usuário.");
print('Senha errada fornecida para esse usuário.');
}
}
}
},
),

谢谢。

您可以使用提供程序包。你可以创建这样的Auth类:

class AuthService {
final FirebaseAuth _auth = FirebaseAuth.instance;

Future singInWithEmailPassword(String email, String password) async {
try {
UserCredential result = await _auth.signInWithEmailAndPassword(
email: email, password: password);
User user = result.user;
return _userFromFirebase(user);
} catch (e) {
print(e.toString());
return null;
}
}
}

然后您可以创建AuthUser类,例如

class AuthedUser {
final String uid;
final String name;
final String email;
final String photoUrl;
AuthedUser({this.uid, this.name, this.email, this.photoUrl});
}

然后,您可以使用Firebase用户创建AuthedUser实例,然后监听身份验证状态的更改。

AuthedUser _userFromFirebase(User user) {
print(user);
return user != null
? AuthedUser(
uid: user.uid,
name: user.displayName == null ? 'no name' : user.displayName,
email: user.email,
photoUrl: user.photoURL == null ? null : user.photoURL)
: null;
}
// auth change user stream
Stream<AuthedUser> get user {
return _auth.authStateChanges().map(_userFromFirebase);
}

然后,您可以创建Widget,它会侦听流,例如,如果没有用户,则返回Login Widget,如果有登录用户则返回Nav Widget。

Widget build(BuildContext context) {
final user = Provider.of<AuthedUser>(context);
print(user);
if (user == null) {
return Register();
} else {
return Nav();
}}

最后你只要打电话给

await AuthService()
.signInWithEmailAndPassword(
email: email,
password: password)

firebase身份验证具有currentUser属性。你需要在应用程序启动时进行检查。检查文档https://firebase.flutter.dev/docs/auth/usage/#user-管理

User user = FirebaseAuth.instance.currentUser;
if(user == null){
// go to login page
} else {
// go to home page
}

最新更新