使用颤振的多用户应用程序

问题描述 投票:0回答:1

我正在开发一个有多个用户的应用程序。我有一个资源列表,这个资源列表就像一个巧克力列表(只有一个和唯一的)。现在,我在所有活跃用户的主屏幕上显示这些巧克力。现在,用户可以点击巧克力,它将被提供给他们。但是,当发生这种情况时,我想刷新所有登录用户,以确保没有两个用户拥有相同的巧克力。

我正在使用数据库触发器来监视数据库中的更改。我能够做到这一点,但我关心的是如何刷新listView。

我的算法如下:

1)监视数据库中的更改。 2)获取新数据集。 3)更新视图

我尝试创建syncDatabaseFunction,如下所示:

  Future syncDatabaseFunction() async {
    CollectionReference reference = Firestore.instance.collection('Chocolates');
    reference.snapshots().listen((querySnapshot){
      querySnapshot.documentChanges.forEach((change){
        print("Changed Chocolate");
        BackendOperations.getAllChocolates().then((value){

         var chocolateTemp = (value as List<ChocolateModel>)
              .where((element) => (element.chocolateColor == "Brown"))
              .toList();
          print("Count is ");
         return chocolateTemp;

        });
      });
    });
  }

对于listview,我使用的是futureBuilder。

dart flutter
1个回答
1
投票

我认为,如果你使用StreamBuilder,你将解决问题。当用户删除或添加为所有用户显示的新评论时。 StreamBuilder是这样做的,成为流的观察者。

这是我的代码:

Widget getListComment() {
    return StreamBuilder<QuerySnapshot>(
      stream: Firestore.instance
          .collection('comments')
          .where('post', isEqualTo: postRef)
          .orderBy('createdAt', descending: true)
          .snapshots(),

      builder: (BuildContext context, AsyncSnapshot<QuerySnapshot> snapshot) {
        if (snapshot.hasError) return new Text('Error: ${snapshot.error}');
        switch (snapshot.connectionState) {
          case ConnectionState.waiting:
            return Column(
              children: <Widget>[
                CircularProgressIndicator(),
              ],
            );

          default:
            return new ListView(
              children:
                  snapshot.data.documents.map((DocumentSnapshot document) {
                return CommentItem(
                  key: Key(document.documentID),
                  comment: Comment.fromDoc(document),
                  myUser: widget.myUser,
                );
              }).toList(),
            );
        }
      },
    );
  }

我从Firebase收到评论并在ListView中显示,我认为这就像你的巧克力。

© www.soinside.com 2019 - 2024. All rights reserved.