【问题标题】:Displaying Complex API in flutter ListView在 Flutter ListView 中显示复杂的 API
【发布时间】:2021-07-25 08:25:30
【问题描述】:

我有一个复杂的 API,它有一个 json 数组。我想在颤动的 listView 中显示 JSON 中的详细信息。 以下是我的json

{
    "hours": [
        {
            "time": "2021-03-23T00:00:00+00:00",
            "waveHeight": {
                "icon": 1.35,
                "meteo": 1.25,
                "noaa": 1.28,
                "sg": 1.25
            }
        },
{
            "time": "2021-03-23T00:00:00+00:00",
            "waveHeight": {
                "icon": 1.35,
                "meteo": 1.25,
                "noaa": 1.28,
                "sg": 1.25
            }
        },
    ],
}

这是获取数据函数

void getJsonData() async {
    String url2 =
        'https://api.stormglass.io/v2/weather/point?lat=5.9774&lng=80.4288&params=waveHeight&start=2021-03-23&end2021-03-24';
    
    String apiKey =
        'sxascdsvfdyhujn5787654gb-7a54-11eb-8302-0242ac130002';
    print('0');

    try {
      Response response = await get(Uri.parse(url2),
          headers: {HttpHeaders.authorizationHeader: apiKey});

      var jsonData = jsonDecode(response.body);
      List data = jsonData["hours"];

      data.forEach((element) {
        Map obj = element;
        Map wave = obj['waveHeight'];
        String time = obj['time'];

        print(time);
        double icon = wave['icon'];

        print(icon);
      });
    } catch (e) {
      print(e);
    }
  }

所有 JSON 数据都已成功获取并显示在控制台中。但我想在颤动的 ListView 中显示数据。我该怎么做?

【问题讨论】:

    标签: android json flutter flutter-layout flutter-web


    【解决方案1】:

    首先定义一个新类

    class Wave {
      final DateTime time;
      final double icon;
      final double meteo;
      final double noaa;
      final double sg;
    
      Wave ({
        this.time,
        this.icon,
        this.meteo,
        this.noaa,
        this.sg,
      });
    }
    

    创建一个空列表

    List<Wave> _data = [];
    

    使用以下代码编辑您的代码

          final _extractedData = json.decode(result.body) as Map<String, dynamic>;
    
          List<Wave> _fetchedData = [];
    
          _extractedData['hours'].forEach((value) {
            _fetchedData.add(Wave(
              time: value['time'],
              icon: value['icon'],
              meteo: value['meteo'],
              noaa: value['noaa'],
              sg: value['sg'],
            ));
          });
          _data = _fetchedData;
     
    

    _data 具有从 json 接收到的新数据列表。

    【讨论】:

    • @Learnado 如果此代码对您有所帮助,请打勾。
    • 它正在工作,但是当我打印 _data 时,它显示为“Wave”的实例
    • 显然它会显示它是 Wave 的实例。 _data 是 Wave 类型的列表。要使用它,请尝试_data[index].time。如果您不熟悉编码,请尝试使用某些课程的帮助。 Flutter 是一门简单易学的语言。但是如果你没有编码背景或者你是新手,那就很难了。
    猜你喜欢
    • 2020-12-17
    • 1970-01-01
    • 1970-01-01
    • 2020-12-30
    • 2021-05-13
    • 1970-01-01
    • 2023-01-31
    • 2020-04-30
    • 1970-01-01
    相关资源
    最近更新 更多