我有一个事件应用程序(数据存储在Firestore中),用户可以在其中“喜欢”事件。我希望有人可以就我是否走对路提供建议。
选项
1)每次加载事件页面时,从Firestore中获取数据(以检查用户是否喜欢事件)。问题是每次查看事件时都会发出两个不同的网络请求。
2)使用SharedPreferences存储eventsLiked的副本(然后使用 eventsLiked.contains(event.id)检查用户是否喜欢该事件)。
3)使用提供程序包。我猜这是要走的路,但是我现在还停留在那儿。我尝试制作一个“ Likes”类,然后在按下“ like”按钮时对其进行更新,但是当我离开“事件”页面(下面的代码)后,likesList数组将返回null。
存储:
事件(集合)
用户(集合)
likes.dart :
class Likes extends ChangeNotifier {
Likes({this.likesList});
List likesList = [];
updateLikes(likes) {
likesList = likes;
notifyListeners();
}
}
likeButton.dart:
Future _like({user, event, likes}) async {
var firestore = Firestore.instance;
var batch = firestore.batch();
DocumentReference docRef =
firestore.collection('events').document(event.id);
DocumentReference userRef =
firestore.collection('users').document(user.uid);
batch.updateData(docRef, {
'likes': likes.likesList.contains(event.id)
? FieldValue.increment(-1)
: FieldValue.increment(1)
});
batch.updateData(userRef, {
'liked': likes.likesList.contains(event.id)
? FieldValue.arrayRemove([event.id])
: FieldValue.arrayUnion([event.id])
});
batch.commit();
await userRef.get().then(
(value) => likes.updateLikes(
value.data['liked'],
),
);
print("LikesList: ${likes.likesList}");
}
}
event.dart
ChangeNotifierProvider(
builder: (_) => Likes(),
child: Scaffold(
...
如果有人可以提出建议(或告诉我我是否朝着完全错误的方向前进!),我将不胜感激。
谢谢!