【问题标题】:Flutter: Problem with Firebase and NavigationFlutter:Firebase 和导航的问题
【发布时间】:2020-10-09 13:37:06
【问题描述】:

我用下一个简单的代码来完成登录/注册的整个过程:

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return StreamProvider<FirebaseUser>.value(
      value:  _auth.onAuthStateChanged,
      child: MaterialApp(
        home: Wrapper(),
      ),
    );
  }
}

class Wrapper extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    final firebaseuser = Provider.of<FirebaseUser>(context);

    // return either Home or Authenticate widget:
    if (firebaseuser == null) {
      return WelcomeScreen();
    } else {
      return StreamProvider<MyUser>.value(
        value: FirestoreService(uid: firebaseuser.uid).user,
        child: MaterialApp(
          home: HomeWrapper(),
        ),
      );
    }
  }
}

如您所见,我为我的用户模型(带有用户数据)使用了第二个StreamProvider,该模型在创建或登录的同时填充:

  @override
  Future<MyUser> signUp(String email, String password, Extrainfo info) async {
    try {
      AuthResult result = await _auth.createUserWithEmailAndPassword(email: email, password: password);
      FirebaseUser firebaseUser = result.user;

      // create a new document for the user with the uid
      FirestoreService().createUser(firebaseUser.uid,email,extrainfo);

      return _userFromFirebaseUser(firebaseUser);
    } catch (e) {
      //print(e.toString());
      //return e.toString();
    }
  }

通常用户注册/登录WelcomeScreen(),然后第二个stream(属于MyUser)触发HomeWrapper() 的构建(从那里我可以获得所有用户的数据)。用户会自动重定向到这里。

问题是:一切正常除非我在WelcomeScreen() 中引入导航。我需要在其中包含一些屏幕,但是一旦这样做,注册屏幕时不会自动更改为HomeWrapper()(尽管流的值被调用)。登录时不会发生这种情况,因为调用了 onAuthStateChanged 并且在小部件树的较高位置触发了重新构建。

我想问题是第二个 Provider 超出了导航范围,但我不知道如何以适当的方式解决这个问题。

【问题讨论】:

    标签: firebase flutter google-cloud-firestore firebase-authentication


    【解决方案1】:

    以适当的方式,我只是建议您仅在用户已有效注册后才导航到主屏幕;我的意思是在 SignUpScreen 中。

    当您调用您的注册函数时:使用then(/*navigation callback*/) 而不是在包装器中使用流。只需将其删除,然后尝试这种方式。

    【讨论】:

    • 谢谢,这是解决我昨天发现的问题的一种方法,它有效。我想我不应该对抗系统
    猜你喜欢
    • 1970-01-01
    • 2021-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-24
    相关资源
    最近更新 更多