调用null和布尔表达式的方法不能为null



当新用户注册到应用程序并且收藏夹尚未设置时,我正在努力避免对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'] ?? []; 
}

相关内容

最新更新