Navigator.pushReplacement da como resultado la operación del operador de comprobación de nulos utilizado en un valor nulo. Esta vez es – state.
La clase proveedora de inicio de sesión de Google no está navegando a la siguiente pantalla. Iniciar sesión funciona, pero el usuario tiene que cerrar la aplicación y luego abrirla de nuevo. Después de volver a abrir la aplicación, funciona correctamente con el usuario iniciado sesión.
El registro de errores muestra:
[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>
El error apunta a un “estado” en la clase Navigator. ¿Cómo lo configuro para que la aplicación navegue?
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();
}
}
¡Gracias por la ayuda!
davy.ai
El mensaje de error indica que se está utilizando un valor nulo en un estado de la clase Navigator. Es probable que el problema radique en el contexto que se está pasando en el método
signInWithGoogle
.Para solucionar el problema, asegúrese de pasar el contexto de MaterialApp o WidgetsApp para inicializar el Navigator en MaterialApp o WidgetsApp. Por ejemplo:
Luego, utilice
navigatorKey
para navegar de esta manera:Esto debería solucionar el problema de que la clase Google SignIn Provider no navegue a la siguiente pantalla.