Navigator.pushReplacement提供用于Null值的Null检查运算符.这一次是状态



Google签名提供程序类没有导航到下一个屏幕。用户登录是有效的,但用户必须先登录,然后离开应用程序,然后重新打开。重新打开应用程序后,用户登录后可以正常工作。

错误日志给出:[ERROR:flutter/lib/ui/ui_dart_state.cc(209)] Unhandled Exception: Null check operator used on a null value E/flutter ( 9884): #0 StatefulElement.state (package:flutter/src/widgets/framework.dart:4789:44) E/flutter ( 9884): #1 Navigator.of (package:flutter/src/widgets/navigator.dart:2730:47) E/flutter ( 9884): #2 GoogleSignInProvider.signInwithGoogle (package:blahblah/google_signin_provider.dart:37:17) E/flutter ( 9884): <asynchronous suspension>

该错误指向"0";状态";在Navigator类中。如何设置它,以便应用程序导航?

class GoogleSignInProvider extends ChangeNotifier {
final FirebaseAuth _auth = FirebaseAuth.instance;
User user = firebaseAuth.currentUser;
final GoogleSignIn _googleSignIn = GoogleSignIn();
Future<String> signInwithGoogle(BuildContext context) async {
try {
final GoogleSignInAccount googleSignInAccount =
await _googleSignIn.signIn();
final GoogleSignInAuthentication googleSignInAuthentication =
await googleSignInAccount.authentication;
final AuthCredential credential = GoogleAuthProvider.credential(
accessToken: googleSignInAuthentication.accessToken,
idToken: googleSignInAuthentication.idToken,
);
await _auth.signInWithCredential(credential);
} on FirebaseAuthException catch (e) {
print(e.message);
throw e;
}
final User currentUser = FirebaseAuth.instance.currentUser;
String uid = currentUser.uid;
if (currentUser != null)
await usersRef.doc(currentUser.uid).set({'id': uid, 'email': 
currentUser.email,
'username': currentUser.displayName, 'photoUrl': 
currentUser.photoURL,
'phone': '', 'dob': '', 'sex': ''});
Navigator.of(context).pushReplacement(
MaterialPageRoute(builder: (_) => TabScreen()));
notifyListeners();
return null;
}
Future logout() async {
await _googleSignIn.disconnect();
FirebaseAuth.instance.signOut();
}
}

谢谢你的帮助!

由于您启用了健全的null安全,因此不需要对currentUser进行null检查。

最新更新