如何使用Flutter监听Cloud Firestore中的文档更改?

时间:2018-05-22 15:22:47

标签: dart google-cloud-firestore flutter

我想有一个侦听器方法,如果发生更改,将检查文档集合的更改。

类似的东西:

import 'package:cloud_firestore/cloud_firestore.dart';


  Future<Null> checkFocChanges() async {
    Firestore.instance.runTransaction((Transaction tx) async {
      CollectionReference reference = Firestore.instance.collection('planets');
      reference.onSnapshot.listen((querySnapshot) {
        querySnapshot.docChanges.forEach((change) {
          // Do something with change
        });
      });
    });
  }

此处的错误是onSnapshot未定义CollectionReference

有什么想法吗?

1 个答案:

答案 0 :(得分:10)

通过cloud_firestore's documentation阅读,您可以看到来自Stream的{​​{1}}可以通过Query获得。

为了让您理解,我会稍微改变您的代码:

snapshots()

您也不应该在事务中运行它。执行此操作的 Flutter方式使用CollectionReference reference = Firestore.instance.collection('planets'); reference.snapshots().listen((querySnapshot) { querySnapshot.documentChanges.forEach((change) { // Do something with change }); }); ,直接来自cloud_firestore Dart pub page

StreamBuilder

如果您想了解更多信息,可以take a look at the source,有详细记录,但不能自我解释。

另请注意,我已将StreamBuilder<QuerySnapshot>( stream: Firestore.instance.collection('books').snapshots(), builder: (BuildContext context, AsyncSnapshot<QuerySnapshot> snapshot) { if (!snapshot.hasData) return new Text('Loading...'); return new ListView( children: snapshot.data.documents.map((DocumentSnapshot document) { return new ListTile( title: new Text(document['title']), subtitle: new Text(document['author']), ); }).toList(), ); }, ); 更改为docChanges。你可以在query_snapshot file中看到。如果您使用的是IntelliJ或Android Studio等IDE,那么点击其中的文件也非常容易。