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

Flutter如何基于JSON接口数据实现可跳转对应测试项的下拉列表

实现步骤

你需要修改状态类变量、异步请求处理、下拉组件渲染三个部分,具体修改如下:

1. 调整State类变量定义

把原来写死的模拟列表替换为接口返回的Partner数据存储变量,同时添加加载状态控制:

class _MultipleTestBookingState extends State<MultipleTestBooking> {
  String _selectedDate = DateTime.now().toString();
  // 新增:存储接口返回的合作方列表
  List<Partner> partnerList = [];
  // 新增:加载状态控制
  bool isLoading = true;
  // 新增:存储选中的合作方ID(方便后续跳转传参)
  String? selectedPartnerId;
  // 原来的模拟allLabList、selectedLabFromList变量可以直接删除

2. 处理接口异步请求返回结果

在initState中调用接口时,接收返回的合作方列表,更新页面状态:

@override
void initState(){
  super.initState();
  // 处理异步请求结果
  AllPathLab().then((data) {
    setState(() {
      partnerList = data;
      isLoading = false;
      // 可选:默认选中第一个合作方
      if(partnerList.isNotEmpty) {
        selectedPartnerId = partnerList.first.encPartnerId;
      }
    });
  }).catchError((e) {
    setState(() {
      isLoading = false;
    });
    print("接口请求失败:$e");
  });
}

3. 替换下拉组件的数据源

修改DropdownButton部分的代码,加载中显示加载提示,加载完成后渲染接口返回的合作方选项,选中时跳转到对应的Test页面:

Padding(
  padding: const EdgeInsets.only(left: 0.0),
  child: isLoading 
    ? const CircularProgressIndicator() // 加载中显示加载动画
    : DropdownButton<String>(
        style: TextStyle(
          color: Colors.green,
          fontSize: 15,
          fontFamily: 'Poppins',
        ),
        value: selectedPartnerId,
        hint: const Text("Select Lab"), // 无选中项时的提示
        onChanged: (value) {
          setState(() {
            selectedPartnerId = value!;
          });
          // 选中后跳转到对应的Test页面,把选中的合作方信息传过去
          if(value != null) {
            Partner selectedPartner = partnerList.firstWhere((p) => p.encPartnerId == value);
            // 替换为你自己的Test页面路由逻辑即可
            Navigator.push(context, MaterialPageRoute(
              builder: (context) => TestPage(
                partnerId: selectedPartner.encPartnerId,
                partnerName: selectedPartner.partnerName,
              )
            ));
          }
        },
        // 把合作方列表转成下拉选项
        items: partnerList.map<DropdownMenuItem<String>>((partner) {
          return DropdownMenuItem(
            child: Text(partner.partnerName),
            value: partner.encPartnerId,
          );
        }).toList(),
      ),
),

注意事项

请确保你的Partner模型类已经正确定义了encPartnerId和partnerName两个属性,和接口返回的字段名完全对应。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 22:54:02