收听更改并仅获取有关更新字段的信息
Listen to changes and get info on updated fields only
我有 Flutter/Firebase 应用程序,它允许用户将他们的图书阅读数据存储到 Firestore 中(已阅读的图书、当前正在阅读的图书等)。我想实现一个功能,允许用户查看是否有人读完一本书(FS volume 对象字段“completedUsers”更新)或有人开始阅读一本新书(FS account 对象字段“nowReading”更新)。
我想我应该使用 CollectionReference().snapshots().listen() - 方法,但我还没有弄清楚如何以及如何使用 StreamBuilder 来设置它,所以我可以获得准确的信息更新了数据库对象的哪一部分。
以下是我的用户帐户和音量模型:
@JsonSerializable(explicitToJson: true)
class Account {
String name;
String uid;
List<Volume> nowReading;
List<Volume> wantToRead;
List<Account> friends;
Map<String, Volume> tips;
Account(
{this.name,
this.uid,
this.nowReading,
this.wantToRead,
this.friends,
this.tips});
factory Account.fromJson(Map<String, dynamic> json) =>
_$AccountFromJson(json);
Map<String, dynamic> toJson() => _$AccountToJson(this);
}
@JsonSerializable(explicitToJson: true)
class Volume {
String id;
String title;
String description;
String smallThumbnail;
String bigThumbnail;
List<String> authors;
List<String> categories;
int published;
int pageCount;
double averageGoogleRating;
double averageUserRating;
List<UserReview> userReviews;
List<String> completedUsers;
Volume(
{this.id,
this.title,
this.description,
this.smallThumbnail,
this.bigThumbnail,
this.authors,
this.categories,
this.published,
this.pageCount,
this.averageGoogleRating,
this.averageUserRating,
this.userReviews,
this.completedUsers});
factory Volume.fromJson(Map<String, dynamic> json) => _$VolumeFromJson(json);
Map<String, dynamic> toJson() => _$VolumeToJson(this);
}
Firestore 会在文档发生更改时通知客户端,但不会通知该文档中的哪些特定字段发生了更改。如果您的应用程序需要该信息,您必须自己在应用程序代码中比较以前的 DocumentSnapshot
和新版本。
我有 Flutter/Firebase 应用程序,它允许用户将他们的图书阅读数据存储到 Firestore 中(已阅读的图书、当前正在阅读的图书等)。我想实现一个功能,允许用户查看是否有人读完一本书(FS volume 对象字段“completedUsers”更新)或有人开始阅读一本新书(FS account 对象字段“nowReading”更新)。
我想我应该使用 CollectionReference().snapshots().listen() - 方法,但我还没有弄清楚如何以及如何使用 StreamBuilder 来设置它,所以我可以获得准确的信息更新了数据库对象的哪一部分。
以下是我的用户帐户和音量模型:
@JsonSerializable(explicitToJson: true)
class Account {
String name;
String uid;
List<Volume> nowReading;
List<Volume> wantToRead;
List<Account> friends;
Map<String, Volume> tips;
Account(
{this.name,
this.uid,
this.nowReading,
this.wantToRead,
this.friends,
this.tips});
factory Account.fromJson(Map<String, dynamic> json) =>
_$AccountFromJson(json);
Map<String, dynamic> toJson() => _$AccountToJson(this);
}
@JsonSerializable(explicitToJson: true)
class Volume {
String id;
String title;
String description;
String smallThumbnail;
String bigThumbnail;
List<String> authors;
List<String> categories;
int published;
int pageCount;
double averageGoogleRating;
double averageUserRating;
List<UserReview> userReviews;
List<String> completedUsers;
Volume(
{this.id,
this.title,
this.description,
this.smallThumbnail,
this.bigThumbnail,
this.authors,
this.categories,
this.published,
this.pageCount,
this.averageGoogleRating,
this.averageUserRating,
this.userReviews,
this.completedUsers});
factory Volume.fromJson(Map<String, dynamic> json) => _$VolumeFromJson(json);
Map<String, dynamic> toJson() => _$VolumeToJson(this);
}
Firestore 会在文档发生更改时通知客户端,但不会通知该文档中的哪些特定字段发生了更改。如果您的应用程序需要该信息,您必须自己在应用程序代码中比较以前的 DocumentSnapshot
和新版本。