如何解决getThatWishlist返回Instance of 'Future<Map<dynamic,dynamic>>'问题
问题修复方案
问题原因
getThatWishlist是异步函数,返回Future<Map>,直接将其赋值给UserItems时,存储的是Future实例而非实际的Map数据——因为没有等待异步操作完成。- 原
getThatWishlist函数中对snapshot.data()里的字段使用await是错误的,这些字段是同步的Map值,不是Future,会导致编译错误。
修复步骤
1. 修正getThatWishlist函数
去掉多余的await,并添加空安全判断避免空指针:
Future<Map<dynamic, dynamic>> getThatWishlist(String? wishlistname) async { FirebaseFirestore db = FirebaseFirestore.instance; DocumentSnapshot snapshot = await db .collection('wishlists') .doc(currentUserId) .get(); if (snapshot.data() == null) { return {}; } else { // 直接获取同步Map值,添加空安全判断防止null Map<dynamic, dynamic>? wishlistData = snapshot.data()!['userWishlists']?[wishlistname]?['UserItems']; return wishlistData ?? {}; } }
2. 修正createWishlistForSharedUser函数
使用await等待getThatWishlist完成,拿到实际的Map数据后再传入:
void createWishlistForSharedUser(String? ShareUid) async { FirebaseFirestore db = FirebaseFirestore.instance; // 等待异步函数完成,获取实际的Map数据 Map<dynamic, dynamic> userItems = await getThatWishlist(wishlistName); await db.collection('wishlists').doc(ShareUid).set({ 'sharedWishlistsWithUser': { wishlistName: { 'UserItems': userItems }, 'wishlist owner email': currentUserEmail, }, }, SetOptions(merge: true)); }
关键说明
- 异步函数必须通过
await或.then()获取返回值,直接调用只会得到Future实例。 - 访问Firestore快照的嵌套字段时,添加空安全判断(
?)可避免因字段不存在引发的空指针异常。
内容的提问来源于stack exchange,提问作者Mohammed Sabbagh
相关产品推荐
相关产品推荐

