Я настроил регистрацию на основе ролей, которая работает хорошо! когда пользователи регистрируются, они переходят к различным пользовательским интерфейсам в зависимости от ролей! но логин dosent работает так же! Я думаю, что я что-то пропустил! и администраторы, и обычные пользователи получают один и тот же пользовательский интерфейс при входе в систему, но profileScreen (futureBuilder) падает для обычного пользователя, который не получит доступ! Я хочу, чтобы мой streambuilder также проверил это условие перед навигацией!
// это регистрация
static void signUpUser(BuildContext context,bool admin, String name, String email,
String password) async {
try {
AuthResult authResult = await _auth.createUserWithEmailAndPassword(
email: email,
password: password,
);
FirebaseUser signedInUser = authResult.user;
if (signedInUser != null && admin == true ) {
_firestore.collection('/users').document(signedInUser.uid).setData({
'name': name,
'email': email,
'profileImageUrl': '',
});
Provider
.of<UserData>(context, listen: false)
.currentUserId = signedInUser.uid;
Navigator.pushNamed(context, HomeScreen.id);
// Navigator.pop(context);
}if(signedInUser != null ){
_firestore.collection('users').document(signedInUser.uid).setData({
'name':name,
'email':email,
'profileImageUrl':'',
});
Provider
.of<UserData>(context, listen: false)
.currentUserId = signedInUser.uid;
Navigator.pushNamed(context, NewScreen.id);
}
} catch (e) {
print(e);
}
}
// это логин
static void login(String email, String password) async {
try {
await _auth.signInWithEmailAndPassword(email: email, password: password);
} catch (e) {
print(e);
}
}
// stremBuilder
Widget _getScreenId() {
return StreamBuilder<FirebaseUser>(
stream: FirebaseAuth.instance.onAuthStateChanged,
builder: (BuildContext context, snapshot) {
if (snapshot.hasData) {
Provider
.of<UserData>(context)
.currentUserId = snapshot.data.uid;
return HomeScreen();
} else {
return LoginScreen();
}
}
);
}