当新用户注册到应用程序并且收藏夹尚未设置时,我正在努力避免对Method调用null。
我在两个方法中都放置了一个条件来检索Favorites,以避免方法调用null。
现在我有另一条错误消息,提到布尔表达式不能为null。我不知道如何修复避免这些错误消息。
请注意,这是正常的,用户还没有数据,因为他刚刚注册。
Future<List<dynamic>> getFavorites() async {
List<dynamic> favorites = await _getFavorites();
// ignore: non_constant_identifier_names
List<String> favorites_documentid = [];
favorites.forEach((reference) {
favorites_documentid.add(reference.documentID);
}
);if (favorites_documentid = null)
return getFavorites();
}
Future<List<dynamic>> _getFavorites() async { // TODO: Use class-wide list that updates only when a a favorite is added or removed. Even listen to a snapshot for this, if there are lots of favorites.
DocumentSnapshot snapshot = await Firestore.instance
.collection('Users').document(_user.uid).get();
if (snapshot.data['favorites'] != null) {
return snapshot.data['favorites'];
// DocumentReference
} else getFavorites();
}
我相信这一行有错误
if (favorites_documentid = null)
应该是
if (favorites_documentid == null)
但这并没有帮助,因为favorites_documentid永远不会为null,因为它之前初始化为空List,但不是null
List<String> favorites_documentid = [];
您可以检查此列表是否为空
if (favorites_documentid.isEmpty) { ... }
最后,当用户没有数据时,似乎有一个无限循环,因为getFavorites((被称为_getFavorites
List<dynamic> favorites = await _getFavorites();
如果_getFavorites((中的数据为null,则调用getFavorites((,依此类推
在getFavorites((中相同;
getFavorites() {
...
return getFavorites();
}
如果我真的理解你。您需要检索收藏夹ID的列表。
Future<List<String>> getFavoritesIds() async {
final List<dynamic> favorites = await _getFavorites();
return favorites.map((reference) => reference.documentID);
}
Future<List<dynamic>> _getFavorites() async {
final DocumentSnapshot snapshot = await Firestore.instance.collection('Users').document(_user.uid).get();
return snapshot?.data['favorites'] ?? [];
}