当我在我的应用程序中调用 API 时,它会向我显示数据作为响应,但在未来的构建器中,它无法向我显示数据

Posted

技术标签:

【中文标题】当我在我的应用程序中调用 API 时,它会向我显示数据作为响应,但在未来的构建器中,它无法向我显示数据【英文标题】:When I call API in my app its shows me data as a response but in future builder, it can not show me data 【发布时间】:2021-08-04 20:14:56 【问题描述】:

Future getMatchDataHome() async 
    List<TeamData> userdata= [];
    try 
      http.Response response =
          await http.post(Uri.parse('https://localhost:2085/api/data.json'), body: 
        'user_id': '2',
      );
      for (var tp in json.decode(response.body)['list']) 
        TeamData teamData = TeamData(
          id: '$tp['id']',
          createrName: '$tp['creator_name']',
        );
        userdata.add(teamData);
      
      return userdata;
     catch (e) 
      print(e);
    
  


 @override
  Widget build(BuildContext context) 

    return Container(
      child: FutureBuilder(
        future: getMatchDataHome(),
        builder: (context, snapshot) 
          print(snapshot.data);
          if (snapshot.data == null) 
            return ProgressbarCustome() ;
           else 
            return ListView.builder(
                itemCount:
                    snapshot.data.length,
                itemBuilder: (context, index) 
                  var snap = snapshot.data[index];
                  return ListTile(
                title: Text('$snap.id'),
                trailing: Text('$snap.createrName'),
                 );
                );
          
        ,
      ),
    );
  

颤振医生

[√] Flutter (Channel stable, 2.0.6, on Microsoft Windows [Version 10.0.21359.1], locale en-IN)

[√] android 工具链 - 为 Android 设备开发(Android SDK 版本 30.0.3)

[√] Chrome - 为网络开发

[√] Visual Studio - 为 Windows 开发(Visual Studio Community 2019 16.9.3)

[√]Android Studio(4.1.0版)

[√] VS 代码(版本 1.56.1)

[√] 已连接设备(4 个可用)

• 未发现任何问题!

【问题讨论】:

【参考方案1】:

for-loop 更改为:

 await Future.wait(json.decode(response.body)['list'].map((input) async 
     TeamData teamData = TeamData(
          id: '$tp['id']',
          createrName: '$tp['creator_name']',
        );
     userdata.add(teamData);
  ));

  return userdata;

【讨论】:

【参考方案2】:

尝试为你的未来定义一个返回类型:

Future<List<TeamData>> getMatchDataHome() async 
   ...

您的 FutureBuilder 很可能不知道返回类型,因此它不知道 snapshot.data 的类型为 List&lt;TeamData&gt;。此外,将此类型添加到 FutureBuilder 本身,例如 FutureBuilder&lt;List&lt;TeamData&gt;&gt;(...)

【讨论】:

以上是关于当我在我的应用程序中调用 API 时,它会向我显示数据作为响应,但在未来的构建器中,它无法向我显示数据的主要内容,如果未能解决你的问题,请参考以下文章

我想在我的 React Native 应用程序中的谷歌地图中显示附近的餐馆。当我调用 Google API 附近搜索时,它会抛出状态:'ZERO_RESULTS'

当我将我的 laravel 项目放入 xampp 时,我的登录不起作用

如何并行化 python api 调用?

同步调用多个API并立即显示结果

如何在 Android 模拟器中下载 Google Play 服务?

如何从 fetch javascript 请求的响应中获取数据