您收到此错误是因为
Provider.of<UserData>(context).currentUserId = snapshot.data.uid;
尝试下一步:
return StreamBuilder<UserData>(
stream: auth.onAuthStateChanged,
builder: (_, AsyncSnapshot<UserData> snapshot) {
if (snapshot.connectionState == ConnectionState.active) {
final UserData user = snapshot.data;
if (user == null){
return LoginScreen()
}
return Provider.value(
value: snapshot.data,
child: HomeScreen(),
);
} else {
return Scaffold(
body: Center(
child: CircularProgressIndicator(),
),
);
}
},
);
但是,您将需要执行我实际上建议您执行的额外步骤,实施和 authservice 以将 FirebaseUser 映射到您的 UserData。
class FirebaseAuthService implements AuthService {
final FirebaseAuth _firebaseAuth = FirebaseAuth.instance;
UserSystem _userFromFirebase(User user) {
if (user == null) {
return null;
}
return UserData(
uid: user.uid,
email: user.email,
displayName: user.displayName,
photoUrl: user.photoURL,
isVerified: user.emailVerified);
}
@override
Stream<UserData> get onAuthStateChanged {
return _firebaseAuth.onAuthStateChanged.map(_userFromFirebase);
}
}
当然,这是可选的,添加一个抽象类,您可以在其中管理和定义所有方法。 Facebook、谷歌、EmailAndPassword。
abstract class AuthService {
Future<UserData> currentUserSystem();
Future<UserData> signInAnonymously();
Future<UserData> signInWithEmailAndPassword(String email, String password);
Future<UserData> signInWithGoogle();
Future<UserData> signInWithFacebook();
Future<void> signOut();
Stream<UserData> get onAuthStateChanged;
void dispose();
}
如果这有帮助,请告诉我!