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

如何修复Flutter GetX中的Unhandled Exception: NoSuchMethodError错误

问题分析与修复

你遇到的NoSuchMethodError: The method 'map' was called on null,核心原因是模型层级搞混+数据解析逻辑错误:

  1. 你的Regiones类是整个JSON的顶层模型(包含name: Chile和regions数组),但你在Controller里错误地把JSON中regions数组的每个子元素当作Regiones对象解析——这些子元素实际是Region类型的结构,没有regions字段,导致Regiones.fromJson方法里调用json["regions"].map()时,json["regions"]为null,触发报错。
  2. 你的regionList声明为<Regiones>[].obs,但实际要存储的是Region对象列表,类型不匹配。

修复步骤

1. 修正Controller的逻辑与类型

把regionList的类型改为<Region>[].obs,同时修改getRegiones方法,先解析整个JSON为Regiones实例,再取出里面的regions列表:

class HomeController extends GetxController {
  // 修正类型:存储Region对象列表
  var regionList = <Region>[].obs;

  Future<List<Region>> getRegiones() async {
    var response = await rootBundle.loadString('assets/response.json');
    // 先解析整个JSON为Regiones顶层对象
    Regiones regiones = Regiones.fromJson(jsonDecode(response));
    // 返回里面的regions列表(List<Region>)
    return regiones.regions;
  }

  @override
  Future<void> onInit() async {
    super.onInit();
    regionList.assignAll(await getRegiones());
  }
}

2. 给Model的Regiones.fromJson加空安全处理

防止JSON中regions字段为null时触发报错:

factory Regiones.fromJson(Map<String, dynamic> json) => Regiones(
      name: json["name"] ?? "",
      // 加空判断,若json["regions"]为null则返回空列表
      regions: List<Region>.from(
        (json["regions"] ?? []).map((x) => Region.fromJson(x))
      ),
    );

3. 优化HomePage代码(可选)

因为你用了GetView<HomeController>,可以直接用controller变量,不需要再Get.find():

class HomePage extends GetView<HomeController> {
  const HomePage({super.key});

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Obx(() {
        return controller.regionList.isEmpty
            ? const Center(child: Text('No hay regiones'))
            : ListView.builder(
                itemCount: controller.regionList.length,
                itemBuilder: (context, index) => ListTile(
                  title: Text(controller.regionList[index].name ?? ""),
                ),
              );
      }),
    );
  }
}

关键说明

  • 理清模型层级:顶层是Regiones(对应整个JSON),里面的regions字段是List<Region>(对应每个地区数据)。
  • 空安全处理:在解析JSON时,对可能为null的字段加默认值,避免调用map()等方法时触发null错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 11:51:32