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

Flutter使用GetX获取数据时出现类型不匹配错误求助

解决Flutter GetX中Map<String, dynamic>' is not a subtype of type 'CategoryModel'错误

这个错误的核心原因是你的categoriesList列表中存储的是Map<String, dynamic>类型数据,而非CategoryModel实例,导致传递给_buildSingleCategory时类型不匹配。以下是具体解决步骤:

1. 修正CategoriesController的数据转换逻辑

确保在控制器中获取到原始JSON数据后,正确转换为CategoryModel列表:

示例控制器代码:

import 'package:get/get.dart';
import 'package:http/http.dart' as http;
import 'dart:convert';

class CategoriesController extends GetxController {
  List<CategoryModel> categoriesList = [];

  // 加载分类数据的方法
  Future<void> loadCategories() async {
    // 替换为你的实际API地址
    final response = await http.get(Uri.parse("https://your-api-url/categories"));
    
    if (response.statusCode == 200) {
      // 使用模型类的转换方法将JSON转为CategoryModel列表
      categoriesList = categoryModelFromJson(response.body);
      // 通知GetBuilder更新UI
      update();
    }
  }

  @override
  void onInit() {
    super.onInit();
    // 初始化时加载数据
    loadCategories();
  }
}

如果你的原始数据是本地的List<Map<String, dynamic>>,转换方式如下:

// 假设rawCategories是从本地获取的Map列表
List<Map<String, dynamic>> rawCategories = [/* 你的原始数据 */];
categoriesList = rawCategories.map((json) => CategoryModel.fromJson(json)).toList();
update();

2. 确认控制器的类型声明

如果使用Rx响应式列表,确保类型声明正确:

RxList<CategoryModel> categoriesList = <CategoryModel>[].obs;

// 赋值时保持类型一致
categoriesList.assignAll(categoryModelFromJson(response.body));

3. 验证数据传递环节

确保在GetBuilder中传递的categories.categoriesList[index]确实是CategoryModel类型,而非Map。

额外排查点

  • 检查API返回的JSON结构是否与CategoryModel.fromJson中的字段匹配(比如id是否为int类型,name和photo是否为String类型),如果字段类型不匹配,也可能导致转换失败。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 00:20:30