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

Dart中如何正确转换Firestore返回的数组为List<UserEmail>指定类型

错误根源

Dart 不支持将整体 List<dynamic> 直接强转为 List<Map<String, dynamic>>,即使列表内所有元素的实际类型都是 Map<String, dynamic>,这种整体转型在运行时也无法通过校验。Firestore 返回的数组字段默认的运行时类型就是 List<dynamic>,所以你原来的写法会触发类型不匹配报错。

修复方案

有两种常用的可行写法:

  • 先将数组转为 List<dynamic>,遍历每个元素时单独做类型强转
UserModel.fromJson(
    emails = json[emailsKey] != null
        ? (json[emailsKey] as List<dynamic>)
            .map((email) => UserEmail.fromJson(email as Map<String, dynamic>))
            .toList()
        : <UserEmail>[],
)
  • 用cast方法批量转换列表元素的泛型类型(懒加载校验,适合确定数组元素结构完全符合预期的场景)
UserModel.fromJson(
    emails = json[emailsKey] != null
        ? (json[emailsKey] as List<dynamic>)
            .cast<Map<String, dynamic>>()
            .map((email) => UserEmail.fromJson(email))
            .toList()
        : <UserEmail>[],
)

小提示:如果不能完全保证Firestore中数组元素的结构,建议在转换前对每个email元素做类型校验,避免运行时崩溃。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 02:36:03