Построитель потока Управление доступом на основе ролей / Навигация - PullRequest
0 голосов
/ 12 марта 2020

Я настроил регистрацию на основе ролей, которая работает хорошо! когда пользователи регистрируются, они переходят к различным пользовательским интерфейсам в зависимости от ролей! но логин 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();
    }

    }
);

}

...