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

Flutter中DropdownSearch无法加载API数据问题求助

问题排查:Flutter DropdownSearch 无法加载API地区数据

问题现象

  • 点击DropdownSearch组件无响应,无任何数据显示
  • API请求状态码为200,但使用变量idProv拼接URL时返回空列表;手动替换为固定ID(如000001)则能正常获取数据

核心问题分析

1. idProv初始值无效

首次打开下拉框时,idProv大概率为null或空字符串,导致请求URL的参数变为?id=,API接收到无效参数后返回空数据。而手动填入的000001是合法参数,因此能正常返回数据。

2. 响应解析存在类型错误

手动创建Datum对象时,直接将字符串类型的created_at/updated_at赋值给DateTime类型字段,会触发类型转换异常,导致DropdownSearch加载流程中断,表现为点击无响应。

3. 未复用已定义的模型类

代码中已编写ModelProvince模型,但未用于解析响应,而是手动遍历处理,既冗余又容易引入错误。

修复方案

步骤1:初始化idProv为有效默认值

确保首次请求携带合法参数:

// 初始化为API认可的根地区ID,比如000001
String idProv = "000001";

步骤2:用模型类简化响应解析

直接复用ModelProvince解析整个响应,避免手动遍历的错误:

asyncItems: (text) async {
  print("当前请求参数idProv: $idProv");
  final response = await http.get(
    Uri.parse('$baseUrl/v1/auth/mhs_siakad/biodata/get_wilayah?id=$idProv'),
  );
  
  if (response.statusCode != 200) {
    print("API请求失败,状态码: ${response.statusCode}");
    return [];
  }
  
  // 用预定义的模型解析响应
  final modelProvince = modelProvinceFromJson(response.body);
  print("API返回数据条数: ${modelProvince.data.length}");
  return modelProvince.data;
},

步骤3:添加异常捕获(可选但推荐)

在异步逻辑中加入异常捕获,方便快速定位问题:

asyncItems: (text) async {
  try {
    print("当前请求参数idProv: $idProv");
    final response = await http.get(
      Uri.parse('$baseUrl/v1/auth/mhs_siakad/biodata/get_wilayah?id=$idProv'),
    );
    
    if (response.statusCode != 200) {
      print("API请求失败,状态码: ${response.statusCode}");
      return [];
    }
    
    final modelProvince = modelProvinceFromJson(response.body);
    print("API返回数据条数: ${modelProvince.data.length}");
    return modelProvince.data;
  } catch (e) {
    print("加载数据异常: $e");
    return [];
  }
},

步骤4:验证参数更新逻辑

检查onChanged中的赋值逻辑,确保value?.idIndukWilayah是API需要的格式(比如是否包含前导零、是否为有效字符串):

onChanged: (value) {
  idProv = value?.idIndukWilayah ?? "000001"; // 兜底默认值,避免参数为空
},

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 09:37:50