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

调用Firebase Cloud Function返回List<Map<Object?, Object?>>,如何转换为可用类型?

解决Firebase Cloud Function返回Map类型转换失败的问题

直接使用as Map<String?, dynamic>会失败,是因为Dart的泛型类型检查是严格的——_Map<Object?, Object?>和Map<String?, dynamic>属于不同的运行时类型,哪怕实际键都是String,也无法直接强制转换。以下是两种可行的解决方式:

方案1:手动转换键值对构建新Map

既然调试确认所有键都是String,我们可以遍历原Map的键值对,将键转为String类型后,生成符合要求的Map<String?, dynamic>:

final result = await FirebaseFunctions.instance.httpsCallable('users').call();
if (result.data != null) {
  final data = result.data as List<Object?>;
  for (final obj in data) {
    if (obj != null && obj is Map<Object?, Object?>) {
      final user = Map<String?, dynamic>.fromEntries(
        obj.entries.map(
          (entry) => MapEntry(entry.key as String?, entry.value),
        ),
      );
      // 正常访问user的属性,例如:
      // print(user['username']);
      // print(user['age']);
    }
  }
}

方案2:利用JSON序列化重新解析

Firebase Cloud Function返回的数据本质是JSON结构,我们可以先将结果转为JSON字符串,再重新解码,得到标准的Map<String, dynamic>:

import 'dart:convert';

// ...

final result = await FirebaseFunctions.instance.httpsCallable('users').call();
if (result.data != null) {
  final jsonString = json.encode(result.data);
  final data = json.decode(jsonString) as List<dynamic>;
  for (final user in data) {
    // user自动为Map<String, dynamic>,直接使用即可
    // print(user['id']);
    // print(user['email']);
  }
}

内容的提问来源于stack exchange,提问作者Neigaard

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 07:31:00