【问题标题】:Flutter: Snapshot is not updating its dataFlutter:快照未更新其数据
【发布时间】:2021-04-02 15:25:15
【问题描述】:

所以我正在尝试将数据保存到 Firestore,但我有一个要注册的课程,其中包含以下代码:

FirebaseAuth auth = FirebaseAuth.instance;
        await auth.createUserWithEmailAndPassword(
            email: emailController.text, password: passwordController.text)
            .then((value) => {
          Navigator.pushNamed(context, 'DialogFlow'),
          user=auth.currentUser,
          user.sendEmailVerification(),
          DatabaseService(uid:user.uid).UpdateUserData("", emailController.text, ChatScreenState().mess)

这会将我导航到包含以下代码的对话框流:

    @override
      Widget build(BuildContext context) {
         final firebaseUser = context.watch<User>();
            FirebaseAuth auth = FirebaseAuth.instance;
            user=auth.currentUser;
              DatabaseService db = DatabaseService(uid: user.uid);
return StreamBuilder(
        stream: db.userData,
        builder: (context , snapshot){
          Userdata userdata=snapshot.data;
          print("====================================");
          print(snapshot.data);
          print("====================================");
          if (userdata != null) {
            this.userTestMessage = "";
            shhh = pressed ? true : false;
            flag = true;
            if (!Retrieved_messages) {
              this.messsages = userdata.messsages; //Retrieve user data from firebase only once.
              // Retrieve user data from firebase only once.
              Retrieved_messages = true;
            }//load only 20 messages at once . When we scroll up load more.
              db.UpdateUserData(
                firebaseUser.displayName, firebaseUser.email, this.messsages);
            print(userdata.messsages);
            print(mess);
            print(userdata.messsages);
            print("==============================");
            print(snapshot.data);
            print("==============================");
          }
          if (db.getUserMessages() == null) {
            if (firebaseUser != null) {
              db.UpdateUserData(
                  firebaseUser.displayName, firebaseUser.email, this.messsages);
            }
          }

数据库类是

    DatabaseService({this.uid, this.messsages});

  final CollectionReference userCollection = FirebaseFirestore.instance
      .collection('users');

  UpdateUserData(String Username, String Email,
      List messsages) async
  { try {
    return await FirebaseFirestore.instance.collection("users").doc(uid).set({
      'Username': Username,
      'Email': Email,
      'messsages': messsages,

    }
    );
  }catch(e){
    print(e+" this is the error");
  }
  }


  Future getUserMessages() async
  {
    FirebaseFirestore.instance.collection(uid).snapshots();
  }


  Userdata _userDataFromSnapshot(DocumentSnapshot snapshot) {
    return Userdata(uid: uid,
        name: snapshot.data()['Username'],
        email: snapshot.data()['Email'],
        messsages: snapshot.data()['messsages']
    );
  }

  Stream<Userdata> get userData {
    return userCollection.doc(uid).snapshots().map(_userDataFromSnapshot);
  }


}

我面临的问题是,每当我创建一个新用户并尝试保存新消息时,firestore 会不断保存和删除消息,所以它处于无限循环中,所以我希望有人能告诉我我怎样才能解决它保存消息而不删除它们。

注意:快照数据不会更新。

【问题讨论】:

    标签: flutter


    【解决方案1】:

    我相信您重建构建函数的原因是在 build() 的开头使用了context.watch。如在集团documentation:

    在 build 方法的根使用 context.watch 将导致当 bloc 状态更改时重新构建整个小部件。如果不需要重建整个小部件,请使用 BlocBuilder 包装应重建的部分,使用带有 context.watch 的 Builder 来确定重建范围,或者将小部件分解为更小的小部件。

    【讨论】:

      猜你喜欢
      • 2021-04-02
      • 2020-03-19
      • 2020-01-16
      • 2021-11-17
      • 2021-07-01
      • 2023-02-11
      • 1970-01-01
      • 1970-01-01
      • 2020-07-02
      相关资源
      最近更新 更多