You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何解决getThatWishlist返回Instance of 'Future<Map<dynamic,dynamic>>'问题

问题修复方案

问题原因

  1. getThatWishlist是异步函数,返回Future<Map>,直接将其赋值给UserItems时,存储的是Future实例而非实际的Map数据——因为没有等待异步操作完成。
  2. 原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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 09:25:14