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

Flutter中如何使用Future.wait并行请求多个Future<List>并解决类型报错

错误原因

  1. 泛型不匹配:你的3个请求方法返回值都是Future<List<Result>>,Future.wait执行后会返回Future<List<List<Result>>>(外层List对应3个请求的返回结果,每个元素是单个请求返回的Result数组),但你给FutureBuilder声明的泛型是List<Result>,和实际返回类型不匹配触发报错。
  2. 参数缺失:调用fetchResult2、fetchResult3时没有传入必填的mv_id参数,就算类型问题解决也会触发参数异常。
  3. 加载判断逻辑错误:原判断逻辑只覆盖了ConnectionState.none的场景,没有处理加载中、请求失败的情况,数据为空时会触发空指针异常。

修复方案

如果你需要把3个接口返回的Result数组合并成一个列表展示,直接用以下修正后的UI代码即可:

class Results extends StatelessWidget {
  final int mrId;

  const Results({Key? key, required this.mrId}) : super(key: key);
  @override
  Widget build(BuildContext context) {
    return Scaffold(
        appBar: AppBar(),
        // 修正泛型为List<List<Result>>,匹配Future.wait的返回类型
        body: FutureBuilder<List<List<Result>>>(
            // 给三个请求都传入正确的mv_id参数
            future: Future.wait([fetchResult1(mrId), fetchResult2(mrId), fetchResult3(mrId)]),
            builder: (context, snapshot) {
              // 处理加载中状态
              if (snapshot.connectionState == ConnectionState.waiting) {
                return const Center(child: CircularProgressIndicator());
              }
              // 处理请求失败状态
              if (snapshot.hasError) {
                return Center(child: Text('请求失败:${snapshot.error}'));
              }
              // 拿到三个接口的返回数组,合并为一个大的Result数组
              List<Result> allResults = [];
              for (var list in snapshot.data!) {
                allResults.addAll(list);
              }
              return ListView.builder(
                  itemCount: allResults.length,
                  itemBuilder: (context, index) {
                    Result project = allResults[index];
                    return ListTile(
                      title: Text(project.rlLaststation),
                      subtitle: Text(project.rlLaststation),
                    );
                  });
            }));
  }
}

如果你需要分别使用三个接口的返回数据,不需要合并,直接通过下标取值即可:

  • 第一个接口返回数据:snapshot.data![0]
  • 第二个接口返回数据:snapshot.data![1]
  • 第三个接口返回数据:snapshot.data![2]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 06:06:00