我正在学习 Youtube 的教程。当我顺其自然时,一切正常,但是当我添加代码时,它会出错。 当用户在注销后第一次登录时,它会停留在登录页面并且不会导航到主页。但是当我们再次关闭并打开应用程序时,它会将用户带到主页面。请帮我解决这个问题,我用谷歌搜索了它,我在 fb 组中提问,但找不到解决方案。 这是我的代码。 来自 auth.dart 文件
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:firebase_auth/firebase_auth.dart';
import 'package:twitter_clone/models/user.dart';
class AuthService {
FirebaseAuth auth = FirebaseAuth.instance;
UserModel _userFromFirebaseUser(User user) {
return user != null ? UserModel(id: user.uid) : null;
}
Stream<UserModel> get user {
return auth.authStateChanges().map(_userFromFirebaseUser);
}
Future signUp(email, password) async {
try {
UserCredential user = await auth.createUserWithEmailAndPassword(
email: email, password: password);
await FirebaseFirestore.instance
.collection('users')
.doc(user.user.uid)
.set({'name': email, 'email': email});
_userFromFirebaseUser(user.user);
} on FirebaseAuthException catch (e) {
if (e.code == 'weak-password') {
print('The password provided is too weak.');
} else if (e.code == 'email-already-in-use') {
print('The account already exists for that email.');
}
} catch (e) {
print(e);
}
}
Future signIn(email, password) async {
try {
User user = (await auth.signInWithEmailAndPassword(
email: email, password: password)) as User;
_userFromFirebaseUser(user);
} on FirebaseAuthException catch (e) {
print(e);
} catch (e) {
print(e);
}
}
Future signOut() async {
try {
return await auth.signOut();
} catch (e) {
print(e.toString());
return null;
}
}
}
来自 Signin.dart 文件
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:twitter_clone/screens/auth/signup.dart';
import 'package:twitter_clone/services/auth.dart';
import 'package:twitter_clone/utilities/constants.dart';
class SignIn extends StatefulWidget {
SignIn({Key key}) : super(key: key);
@override
_SignInState createState() => _SignInState();
}
class _SignInState extends State<SignIn> {
final AuthService _authService = AuthService();
///variables to store email and password
String email = '';
String password = '';
bool _rememberMe = false;
Widget _buildLoginBtn() {
return Container(
padding: EdgeInsets.symmetric(vertical: 25.0),
width: double.infinity,
child: ElevatedButton(
// elevation: 5.0,
onPressed:()
async =>
{
_authService.signIn(email, password)
},
// padding: EdgeInsets.all(15.0),
// shape: RoundedRectangleBorder(
// borderRadius: BorderRadius.circular(30.0),
// ),
// color: Colors.white,
child: Text(
'LOGIN',
style: TextStyle(
color: Color(0xFF527DAA),
letterSpacing: 1.5,
fontSize: 18.0,
fontWeight: FontWeight.bold,
fontFamily: 'OpenSans',
),
),
),
);
}