【问题标题】:TypeError (type 'String' is not a subtype of type 'int' of 'index')TypeError(类型'String'不是'index'类型'int'的子类型)
【发布时间】:2020-04-03 04:18:33
【问题描述】:

这是我的代码。当我运行代码时,我遇到了这样的错误
“TypeError(类型'String'不是'index'的'int'类型的子类型)”。 是与 Json 数据有关还是我使用了错误的数据类型。 Future<List<Arrivals>> 写对了吗?

    class MyHomePage extends StatefulWidget {
      @override
      _MyHomePageState createState() => _MyHomePageState();
    }

    class _MyHomePageState extends State<MyHomePage> {
      List<Arrivals> details = [];
      Future<List<Arrivals>> _getDetails() async {
        var data =
            await http.get("https://flight-api-maldives.herokuapp.com/arrivals");
        var jsonData = jsonDecode(data.body);

        for (var val in jsonData) {
          Arrivals arrivals = Arrivals(
            val['Scheduled'],
            val['Revised'],
            val['From'],
            val['Flight'],
            val['Status'],
          );
          details.add(arrivals);
          print(details.length);
        }
        return details;
      }

      @override
      Widget build(BuildContext context) {
        return Scaffold(
          body: SingleChildScrollView(
            child: Column(
              children: <Widget>[
                FutureBuilder(
                  future: _getDetails(),
                  builder: (BuildContext context, AsyncSnapshot snapshot) {
                    if (snapshot.data != null) {
                      return Container(
                        child: ListView.builder(
                          itemBuilder: (BuildContext context, int index) {
                            return Center(child: Text('snapshot.data[index].Scheduled'),);
                          }
                        ),
                      );
                    }else{
                       return Center(
                        child: Text('NO'),
                      );
                    }
                  },
                )
              ],
            ),
          ),
        );
      }
    } 
    class Arrivals {
      final String Scheduled;
      final String Revised;
      final String From;
      final String Flight;
      final String Status;

      Arrivals(this.Scheduled, this.Revised, this.From, this.Flight, this.Status);
    }

这是我使用的 json 数据:

[
  [
    {
      "Scheduled": "06:35",
      "Revised": "06:35",
      "From": "Kaadedhdhoo (KDM)",
      "Flight": "Maldivian Q2 149",
      "Status": "On-Time"
    },
    {
      "Scheduled": "06:40",
      "Revised": "06:40",
      "From": "Dharavandhoo Island (DRV)",
      "Flight": "Maldivian Q2 289",
      "Status": "On-Time"
    },
 ]
]

我的错误图片在哪里 https://i.stack.imgur.com/qVWLc.png

【问题讨论】:

    标签: flutter dart


    【解决方案1】:

    主要问题在于 json。它是列表列表。

     var jsonData = jsonDecode(data.body);
        jsonData = jsonData[0]; // added line
        for (var val in jsonData) {
    

    此外,他们不需要这么多额外的代码来显示列表视图,您可以使用以下简单代码来显示列表视图。除了那个 Listview.builder 需要 item count 属性来指定项目的总数。

    用你的意愿替换下面的构建方法。

     @override
      Widget build(BuildContext context) {
        return Scaffold(
          body: FutureBuilder(
            future: _getDetails(),
            builder: (BuildContext context, AsyncSnapshot snapshot) {
              print(snapshot);
              if (snapshot.data != null) {
                return ListView.builder(
                    itemCount: snapshot.data.length,
                    itemBuilder: (BuildContext context, int index) {
                      return Center(
                        child: Text(snapshot.data[index].Scheduled.toString()),
                      );
                    });
              } else {
                return Center(
                  child: Text('NO'),
                );
              }
            },
          ),
        );
      }
    

    【讨论】:

    • 我不明白你的意思。
    • 现在我想在该代码中添加搜索栏。如何添加?
    • 我知道的不多,但我认为本教程可以帮助你。youtu.be/-EUsRa2G1zk
    【解决方案2】:

    在 JSON 数据中,列表中有一个列表。

    val['Scheduled'],
    

    此行在列表中被调用,因此方括号需要索引而不是映射键

    【讨论】:

      猜你喜欢
      • 2019-04-24
      • 2021-03-29
      • 1970-01-01
      • 2020-04-22
      • 2021-08-10
      • 2021-09-08
      • 2020-10-02
      • 1970-01-01
      • 2022-09-27
      相关资源
      最近更新 更多