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

Dart 向Map写入键值对后打印返回null的问题如何解决

问题成因

  • 你声明的可空类型变量Map<String, String>? testMap没有进行初始化,默认初始值为null。
  • Dart中空安全调用符?[]的执行逻辑是「左侧对象为null时直接跳过后续操作」,你用到的testMap?["display_name"] = xxx写法,会因为testMap本身是null直接跳过赋值逻辑,不会触发任何写入操作,最终变量依然为null。
  • 额外排查项:如果完成初始化后依然取不到值,需要确认if (item.contains(contact))条件是否成功命中,没有命中的话赋值逻辑同样不会执行。

解决方法

两种方案二选一即可:

方案1:声明时直接初始化

直接在声明变量时赋值空Map实例,后续写入操作可直接生效:

// 可空类型初始化
Map<String, String>? testMap = {};
// 如果后续不会将testMap赋值为null,建议直接用非可空类型,无需额外空判断
// Map<String, String> testMap = {};

方案2:写入前判空初始化

如果不想在声明时初始化,可以在写入键值对前加判空初始化逻辑,只有首次需要写入时才会创建Map实例:

result.forEach((item) {
   if (item.contains(contact)) {
       // 若testMap为null则初始化空Map
       testMap ??= {};
       testMap!["display_name"] = test[i].displayName;
       testMap!["phone_number"] = test[i].phones[x].number;
   }
});

注:初始化完成后testMap已确认非空,可用!操作符直接操作避免空判断开销。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 04:21:02