【问题标题】:Flutter: FutureBuilder type 'FormatException' is not a subtype of type 'Widget'Flutter:FutureBuilder 类型“FormatException”不是“Widget”类型的子类型
【发布时间】:2019-03-19 09:13:39
【问题描述】:

我正在做一个与天气预报有关的部分。

在他的日子里,我问如何获取 json 列表上的数据: Flutter: Get data from a list of json

我认为错误在 json 中关于 ----> ],

当我尝试显示数据时出现错误。我希望能解决这个问题,感谢任何帮助,谢谢。

屏幕截图

JSON:

{
  "metcheckData": {
    "forecastLocation": {
      "forecast": [
        {
          "temperature": "18",
          "dewpoint": "15",
          "rain": "0",
          "freezinglevel": "4656",
          "uvIndex": "0",
          "totalcloud": "8",
          "lowcloud": "8",
          "medcloud": "0",
          "highcloud": "0",
          "humidity": "84",
          "windspeed": "9",
          "meansealevelpressure": "1018.02",
          "windgustspeed": "11",
          "winddirection": "28.7724",
          "windletter": "NNE",
          "icon": "FA",
          "iconName": "Fair",
          "chanceofrain": "0",
          "chanceofsnow": "0",
          "dayOfWeek": "3",
          "weekday": "Tuesday",
          "sunrise": "6:57",
          "sunset": "19:04",
          "dayOrNight": "N",
          "utcTime": "2018-06-19T23:00:00.00"
        },
        {
          "temperature": "18",
          "dewpoint": "15",
          "rain": "0",
          "freezinglevel": "4663",
          "uvIndex": "0",
          "totalcloud": "8",
          "lowcloud": "8",
          "medcloud": "0",
          "highcloud": "0",
          "humidity": "85",
          "windspeed": "9",
          "meansealevelpressure": "1018.26",
          "windgustspeed": "11",
          "winddirection": "29.4946",
          "windletter": "NNE",
          "icon": "FA",
          "iconName": "Fair",
          "chanceofrain": "0",
          "chanceofsnow": "0",
          "dayOfWeek": "4",
          "weekday": "Wednesday",
          "sunrise": "6:57",
          "sunset": "19:04",
          "dayOrNight": "N",
          "utcTime": "2018-06-20T00:00:00.00"
        },
        {
          "temperature": "18",
          "dewpoint": "15",
          "rain": "0",
          "freezinglevel": "4666",
          "uvIndex": "0",
          "totalcloud": "8",
          "lowcloud": "8",
          "medcloud": "0",
          "highcloud": "0",
          "humidity": "86",
          "windspeed": "9",
          "meansealevelpressure": "1018.18",
          "windgustspeed": "10",
          "winddirection": "30.0925",
          "windletter": "NNE",
          "icon": "FA",
          "iconName": "Fair",
          "chanceofrain": "0",
          "chanceofsnow": "0",
          "dayOfWeek": "4",
          "weekday": "Wednesday",
          "sunrise": "6:57",
          "sunset": "19:04",
          "dayOrNight": "N",
          "utcTime": "2018-06-20T01:00:00.00"
        },
        {
          "temperature": "18",
          "dewpoint": "15",
          "rain": "0",
          "freezinglevel": "4668",
          "uvIndex": "0",
          "totalcloud": "11",
          "lowcloud": "11",
          "medcloud": "0",
          "highcloud": "0",
          "humidity": "87",
          "windspeed": "8",
          "meansealevelpressure": "1017.79",
          "windgustspeed": "10",
          "winddirection": "30.761",
          "windletter": "NNE",
          "icon": "FA",
          "iconName": "Fair",
          "chanceofrain": "0",
          "chanceofsnow": "0",
          "dayOfWeek": "4",
          "weekday": "Wednesday",
          "sunrise": "6:57",
          "sunset": "19:04",
          "dayOrNight": "N",
          "utcTime": "2018-06-20T02:00:00.00"
        },
        {
          "temperature": "17",
          "dewpoint": "15",
          "rain": "0",
          "freezinglevel": "4671",
          "uvIndex": "0",
          "totalcloud": "12",
          "lowcloud": "12",
          "medcloud": "0",
          "highcloud": "0",
          "humidity": "87",
          "windspeed": "8",
          "meansealevelpressure": "1017.36",
          "windgustspeed": "9",
          "winddirection": "31.0844",
          "windletter": "NNE",
          "icon": "FA",
          "iconName": "Fair",
          "chanceofrain": "0",
          "chanceofsnow": "0",
          "dayOfWeek": "4",
          "weekday": "Wednesday",
          "sunrise": "6:57",
          "sunset": "19:04",
          "dayOrNight": "N",
          "utcTime": "2018-06-20T03:00:00.00"
        },
        {
          "temperature": "17",
          "dewpoint": "15",
          "rain": "0",
          "freezinglevel": "4673",
          "uvIndex": "0",
          "totalcloud": "11",
          "lowcloud": "11",
          "medcloud": "0",
          "highcloud": "0",
          "humidity": "88",
          "windspeed": "8",
          "meansealevelpressure": "1017.04",
          "windgustspeed": "9",
          "winddirection": "31.4161",
          "windletter": "NNE",
          "icon": "FA",
          "iconName": "Fair",
          "chanceofrain": "0",
          "chanceofsnow": "0",
          "dayOfWeek": "4",
          "weekday": "Wednesday",
          "sunrise": "6:57",
          "sunset": "19:04",
          "dayOrNight": "N",
          "utcTime": "2018-06-20T04:00:00.00"
        },
        {
          "temperature": "17",
          "dewpoint": "15",
          "rain": "0",
          "freezinglevel": "4671",
          "uvIndex": "0",
          "totalcloud": "11",
          "lowcloud": "11",
          "medcloud": "0",
          "highcloud": "0",
          "humidity": "89",
          "windspeed": "7",
          "meansealevelpressure": "1016.89",
          "windgustspeed": "9",
          "winddirection": "31.2326",
          "windletter": "NNE",
          "icon": "FA",
          "iconName": "Fair",
          "chanceofrain": "0",
          "chanceofsnow": "0",
          "dayOfWeek": "4",
          "weekday": "Wednesday",
          "sunrise": "6:57",
          "sunset": "19:04",
          "dayOrNight": "N",
          "utcTime": "2018-06-20T05:00:00.00"
        },
        {
          "temperature": "17",
          "dewpoint": "15",
          "rain": "0",
          "freezinglevel": "4668",
          "uvIndex": "0",
          "totalcloud": "10",
          "lowcloud": "10",
          "medcloud": "0",
          "highcloud": "0",
          "humidity": "91",
          "windspeed": "8",
          "meansealevelpressure": "1017.04",
          "windgustspeed": "9",
          "winddirection": "30.2947",
          "windletter": "NNE",
          "icon": "FA",
          "iconName": "Fair",
          "chanceofrain": "0",
          "chanceofsnow": "0",
          "dayOfWeek": "4",
          "weekday": "Wednesday",
          "sunrise": "6:57",
          "sunset": "19:04",
          "dayOrNight": "N",
          "utcTime": "2018-06-20T06:00:00.00"
        },
        {
          "temperature": "17",
          "dewpoint": "15",
          "rain": "0",
          "freezinglevel": "4664",
          "uvIndex": "0",
          "totalcloud": "9",
          "lowcloud": "9",
          "medcloud": "0",
          "highcloud": "0",
          "humidity": "92",
          "windspeed": "8",
          "meansealevelpressure": "1017.35",
          "windgustspeed": "10",
          "winddirection": "29.0404",
          "windletter": "NNE",
          "icon": "FA",
          "iconName": "Fair",
          "chanceofrain": "0",
          "chanceofsnow": "0",
          "dayOfWeek": "4",
          "weekday": "Wednesday",
          "sunrise": "6:57",
          "sunset": "19:04",
          "dayOrNight": "D",
          "utcTime": "2018-06-20T07:00:00.00"
        },
        {
          "temperature": "17",
          "dewpoint": "15",
          "rain": "0",
          "freezinglevel": "4664",
          "uvIndex": "0",
          "totalcloud": "16",
          "lowcloud": "16",
          "medcloud": "0",
          "highcloud": "0",
          "humidity": "91",
          "windspeed": "9",
          "meansealevelpressure": "1017.77",
          "windgustspeed": "10",
          "winddirection": "27.9231",
          "windletter": "NNE",
          "icon": "FA",
          "iconName": "Fair",
          "chanceofrain": "0",
          "chanceofsnow": "0",
          "dayOfWeek": "4",
          "weekday": "Wednesday",
          "sunrise": "6:57",
          "sunset": "19:04",
          "dayOrNight": "D",
          "utcTime": "2018-06-20T08:00:00.00"
        },
        {
          "temperature": "18",
          "dewpoint": "15",
          "rain": "0",
          "freezinglevel": "4673",
          "uvIndex": "1",
          "totalcloud": "32",
          "lowcloud": "32",
          "medcloud": "0",
          "highcloud": "0",
          "humidity": "86",
          "windspeed": "9",
          "meansealevelpressure": "1018.05",
          "windgustspeed": "11",
          "winddirection": "25.3295",
          "windletter": "NNE",
          "icon": "FA",
          "iconName": "Fair",
          "chanceofrain": "0",
          "chanceofsnow": "0",
          "dayOfWeek": "4",
          "weekday": "Wednesday",
          "sunrise": "6:57",
          "sunset": "19:04",
          "dayOrNight": "D",
          "utcTime": "2018-06-20T09:00:00.00"
        },
        {
          "temperature": "18",
          "dewpoint": "15",
          "rain": "0",
          "freezinglevel": "4687",
          "uvIndex": "2",
          "totalcloud": "38",
          "lowcloud": "38",
          "medcloud": "0",
          "highcloud": "0",
          "humidity": "82",
          "windspeed": "9",
          "meansealevelpressure": "1018.31",
          "windgustspeed": "10",
          "winddirection": "22.0118",
          "windletter": "NNE",
          "icon": "FA",
          "iconName": "Fair",
          "chanceofrain": "0",
          "chanceofsnow": "0",
          "dayOfWeek": "4",
          "weekday": "Wednesday",
          "sunrise": "6:57",
          "sunset": "19:04",
          "dayOrNight": "D",
          "utcTime": "2018-06-20T10:00:00.00"
        },
        {
          "temperature": "19",
          "dewpoint": "15",
          "rain": "0",
          "freezinglevel": "4702",
          "uvIndex": "3",
          "totalcloud": "36",
          "lowcloud": "36",
          "medcloud": "0",
          "highcloud": "0",
          "humidity": "76",
          "windspeed": "9",
          "meansealevelpressure": "1018.56",
          "windgustspeed": "10",
          "winddirection": "18.4385",
          "windletter": "NNE",
          "icon": "FA",
          "iconName": "Fair",
          "chanceofrain": "0",
          "chanceofsnow": "0",
          "dayOfWeek": "4",
          "weekday": "Wednesday",
          "sunrise": "6:57",
          "sunset": "19:04",
          "dayOrNight": "D",
          "utcTime": "2018-06-20T11:00:00.00"
        },
        {
          "temperature": "20",
          "dewpoint": "15",
          "rain": "0",
          "freezinglevel": "4712",
          "uvIndex": "4",
          "totalcloud": "31",
          "lowcloud": "31",
          "medcloud": "0",
          "highcloud": "0",
          "humidity": "72",
          "windspeed": "9",
          "meansealevelpressure": "1018.79",
          "windgustspeed": "9",
          "winddirection": "14.9684",
          "windletter": "NNE",
          "icon": "FA",
          "iconName": "Fair",
          "chanceofrain": "0",
          "chanceofsnow": "0",
          "dayOfWeek": "4",
          "weekday": "Wednesday",
          "sunrise": "6:57",
          "sunset": "19:04",
          "dayOrNight": "D",
          "utcTime": "2018-06-20T12:00:00.00"
        },
        {
          "temperature": "20",
          "dewpoint": "15",
          "rain": "0",
          "freezinglevel": "4722",
          "uvIndex": "5",
          "totalcloud": "26",
          "lowcloud": "26",
          "medcloud": "0",
          "highcloud": "0",
          "humidity": "69",
          "windspeed": "9",
          "meansealevelpressure": "1018.9",
          "windgustspeed": "8",
          "winddirection": "12.5729",
          "windletter": "W",
          "icon": "FA",
          "iconName": "Fair",
          "chanceofrain": "0",
          "chanceofsnow": "0",
          "dayOfWeek": "4",
          "weekday": "Wednesday",
          "sunrise": "6:57",
          "sunset": "19:04",
          "dayOrNight": "D",
          "utcTime": "2018-06-20T13:00:00.00"
        },
        {
          "temperature": "21",
          "dewpoint": "15",
          "rain": "0",
          "freezinglevel": "4739",
          "uvIndex": "10",
          "totalcloud": "1",
          "lowcloud": "1",
          "medcloud": "0",
          "highcloud": "0",
          "humidity": "68",
          "windspeed": "9",
          "meansealevelpressure": "1018.83",
          "windgustspeed": "8",
          "winddirection": "10.6461",
          "windletter": "N",
          "icon": "SU",
          "iconName": "Sunny",
          "chanceofrain": "0",
          "chanceofsnow": "0",
          "dayOfWeek": "4",
          "weekday": "Wednesday",
          "sunrise": "6:57",
          "sunset": "19:04",
          "dayOrNight": "D",
          "utcTime": "2018-06-20T14:00:00.00"
        },
        {
          "temperature": "21",
          "dewpoint": "15",
          "rain": "0",
          "freezinglevel": "4765",
          "uvIndex": "10",
          "totalcloud": "1",
          "lowcloud": "1",
          "medcloud": "0",
          "highcloud": "0",
          "humidity": "67",
          "windspeed": "9",
          "meansealevelpressure": "1018.59",
          "windgustspeed": "8",
          "winddirection": "9.82178",
          "windletter": "N",
          "icon": "SU",
          "iconName": "Sunny",
          "chanceofrain": "0",
          "chanceofsnow": "0",
          "dayOfWeek": "4",
          "weekday": "Wednesday",
          "sunrise": "6:57",
          "sunset": "19:04",
          "dayOrNight": "D",
          "utcTime": "2018-06-20T15:00:00.00"
        },
        {
          "temperature": "21",
          "dewpoint": "15",
          "rain": "0",
          "freezinglevel": "4797",
          "uvIndex": "10",
          "totalcloud": "1",
          "lowcloud": "1",
          "medcloud": "0",
          "highcloud": "0",
          "humidity": "67",
          "windspeed": "9",
          "meansealevelpressure": "1018.34",
          "windgustspeed": "8",
          "winddirection": "9.66212",
          "windletter": "N",
          "icon": "SU",
          "iconName": "Sunny",
          "chanceofrain": "0",
          "chanceofsnow": "0",
          "dayOfWeek": "4",
          "weekday": "Wednesday",
          "sunrise": "6:57",
          "sunset": "19:04",
          "dayOrNight": "D",
          "utcTime": "2018-06-20T16:00:00.00"
        },
        {
          "temperature": "21",
          "dewpoint": "15",
          "rain": "0",
          "freezinglevel": "4826",
          "uvIndex": "9",
          "totalcloud": "1",
          "lowcloud": "1",
          "medcloud": "0",
          "highcloud": "0",
          "humidity": "68",
          "windspeed": "9",
          "meansealevelpressure": "1017.98",
          "windgustspeed": "8",
          "winddirection": "8.49407",
          "windletter": "N",
          "icon": "SU",
          "iconName": "Sunny",
          "chanceofrain": "0",
          "chanceofsnow": "0",
          "dayOfWeek": "4",
          "weekday": "Wednesday",
          "sunrise": "6:57",
          "sunset": "19:04",
          "dayOrNight": "D",
          "utcTime": "2018-06-20T17:00:00.00"
        },
        {
          "temperature": "20",
          "dewpoint": "15",
          "rain": "0",
          "freezinglevel": "4844",
          "uvIndex": "9",
          "totalcloud": "1",
          "lowcloud": "1",
          "medcloud": "0",
          "highcloud": "0",
          "humidity": "70",
          "windspeed": "9",
          "meansealevelpressure": "1017.81",
          "windgustspeed": "9",
          "winddirection": "8.70691",
          "windletter": "N",
          "icon": "SU",
          "iconName": "Sunny",
          "chanceofrain": "0",
          "chanceofsnow": "0",
          "dayOfWeek": "4",
          "weekday": "Wednesday",
          "sunrise": "6:57",
          "sunset": "19:04",
          "dayOrNight": "D",
          "utcTime": "2018-06-20T18:00:00.00"
        },
        {
          "temperature": "20",
          "dewpoint": "15",
          "rain": "0",
          "freezinglevel": "4857",
          "uvIndex": "8",
          "totalcloud": "1",
          "lowcloud": "1",
          "medcloud": "0",
          "highcloud": "0",
          "humidity": "72",
          "windspeed": "10",
          "meansealevelpressure": "1017.93",
          "windgustspeed": "10",
          "winddirection": "10.5324",
          "windletter": "N",
          "icon": "SU",
          "iconName": "Sunny",
          "chanceofrain": "0",
          "chanceofsnow": "0",
          "dayOfWeek": "4",
          "weekday": "Wednesday",
          "sunrise": "6:57",
          "sunset": "19:04",
          "dayOrNight": "N",
          "utcTime": "2018-06-20T19:00:00.00"
        },
        {
          "temperature": "19",
          "dewpoint": "15",
          "rain": "0",
          "freezinglevel": "4872",
          "uvIndex": "2",
          "totalcloud": "1",
          "lowcloud": "1",
          "medcloud": "0",
          "highcloud": "0",
          "humidity": "74",
          "windspeed": "10",
          "meansealevelpressure": "1018.25",
          "windgustspeed": "11",
          "winddirection": "13.7294",
          "windletter": "NNE",
          "icon": "SU",
          "iconName": "Sunny",
          "chanceofrain": "0",
          "chanceofsnow": "0",
          "dayOfWeek": "4",
          "weekday": "Wednesday",
          "sunrise": "6:57",
          "sunset": "19:04",
          "dayOrNight": "N",
          "utcTime": "2018-06-20T20:00:00.00"
        },
        {
          "temperature": "19",
          "dewpoint": "15",
          "rain": "0",
          "freezinglevel": "4889",
          "uvIndex": "1",
          "totalcloud": "1",
          "lowcloud": "1",
          "medcloud": "0",
          "highcloud": "0",
          "humidity": "78",
          "windspeed": "11",
          "meansealevelpressure": "1018.64",
          "windgustspeed": "13",
          "winddirection": "17.2073",
          "windletter": "NNE",
          "icon": "SU",
          "iconName": "Sunny",
          "chanceofrain": "0",
          "chanceofsnow": "0",
          "dayOfWeek": "4",
          "weekday": "Wednesday",
          "sunrise": "6:57",
          "sunset": "19:04",
          "dayOrNight": "N",
          "utcTime": "2018-06-20T21:00:00.00"
        },
      ],
      "continent": "",
      "country": "",
      "location": "28.0/-15.6",
      "latitude": 28.0,
      "longitude": -15.6,
      "timezone": 1
    }
  },
  "feedCreation": "2018-06-19T23:05:19.00",
  "feedCreator": "Metcheck.com",
  "feedModel": "GHX2",
  "feedModelRun": "12Z",
  "feedModelRunInitialTime": "2018-06-19T12:00:00.00",
  "feedResolution": "0.01"
}

查看天气

import 'dart:async';
import 'dart:convert';
import 'package:http/http.dart' as http;
import 'package:flutter/material.dart';

class _ViewWeatherState extends State<ViewWeather> {

  Future<List<Post>> fetchPosts() async {
    http.Response response = await http.get('http://ws1.metcheck.com/ENGINE/v9_0/json.asp?lat=28&lon=-15.6&lid=62228&Fc=No');
    var responseJson = json.decode(response.body);
    return (responseJson['metcheckData']['forecastLocation']['forecast'] as List).map((p) => Post.fromJson(p)).toList();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: new AppBar(
        title: new Text(widget.title),
        backgroundColor: Colors.blue[900],
        centerTitle: true,
      ),
      body: new Container(
        child: new ListView(
          children: <Widget>[
            new FutureBuilder<List<Post>>(
              future: fetchPosts(),
              builder: (context, snapshot) {
                if (snapshot.hasData){
                  List<Post> posts = snapshot.data;
                  return new Column(
                      children: posts.map((post) => new Column(
                        children: <Widget>[
                          new Text(post.temperature),
                        ],
                      )).toList()
                  );
                }
                else if(snapshot.hasError)
                {
                  return snapshot.error;
                }
                return new Center(
                  child: new Column(
                    children: <Widget>[
                      new Padding(padding: new EdgeInsets.all(50.0)),
                      new CircularProgressIndicator(),
                    ],
                  ),
                );
              },
            ),
          ],
        )
      ),
    );
  }
}

发帖

class Post {
  final String temperature, rain, humidity, sunrise, sunset, updateDate;

  Post({
    this.temperature,
    this.rain,
    this.humidity,
    this.sunrise,
    this.sunset,
    this.updateDate,
  });

  factory Post.fromJson(Map<String, dynamic> json) {
    return new Post(
      temperature: json['temperature'] as String,
      rain: json['rain'] as String,
      humidity: json['humidity'] as String,
      sunrise: json['sunrise'] as String,
      sunset: json['sunset'] as String,
      updateDate: json['utcTime'] as String,
    );
  }
}

【问题讨论】:

    标签: json dart flutter


    【解决方案1】:

    JSON 的第 621 行有一个额外的逗号。几乎到最后,在最后一个utcTime 之后,在}] 之间。复制如下以供参考。

    "utcTime": "2018-06-20T21:00:00.00"
            },  <--- OOPS
          ],
          "continent": "",
          "country": "",
          "location": "28.0/-15.6",
          "latitude": 28.0,
          "longitude": -15.6,
          "timezone": 1
        }
      },
      "feedCreation": "2018-06-19T23:05:19.00",
      "feedCreator": "Metcheck.com",
      "feedModel": "GHX2",
      "feedModelRun": "12Z",
      "feedModelRunInitialTime": "2018-06-19T12:00:00.00",
      "feedResolution": "0.01"
    }
    

    【讨论】:

    【解决方案2】:

    问题来自两个地方:

    1) 您的 JSON 无效

    2) 问题 1) 使您的解析失败触发:

    else if(snapshot.hasError) { return snapshot.error; }

    你可以猜到error不是一个Widget,这会导致FormatException

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-09
      • 1970-01-01
      • 1970-01-01
      • 2021-06-04
      • 2020-04-07
      • 2023-03-27
      相关资源
      最近更新 更多