如何在Flutter中解决“预期类型为'int'的值,但得到类型为'String'的值”

时间:2020-07-22 17:22:21

标签: flutter dart

我有一个本地JSON文件,如下所示:

[
    {
        "1": [
            {
                "mode": "text",
                "value": "text exapple1"
            },
            {
                "mode": "latex",
                "value": "\frac00"
            },
            {
                "mode": "text",
                "value": "text exapple2"
            },
            {
                "mode": "latex",
                "value": "\frac00"
            },
            {
                "mode": "text",
                "value": "text exapple3"
            }
        ]
    },
    {
        "2": [
            {
                "mode": "text",
                "value": "text exapple4"
            }
        ]
    }
]

并且我正在尝试在代码中使用FutureBuilder对其进行解析:

return FutureBuilder(
    future:
        DefaultAssetBundle.of(context).loadString("assets/paragraph.json"),
    builder: (context, snapshot) {
      var mydata = json.decode(snapshot.data.toString());
      if (mydata != null) {
        return SizeTransition(
            axis: Axis.vertical,
            sizeFactor: animation,
            child: Center(child: Text(mydata["1"][0].toString()))
            );
      } else {
        return SizeTransition(
            axis: Axis.vertical,
            sizeFactor: animation,
            child: Center(child: CircularProgressIndicator())
            );
      }
    });

这是我收到的错误消息:

══╡小工具图书馆的例外情况提示 ╞═════════════════════════════════════════════════ ══════════ 下面的TypeErrorImpl被抛出 FutureBuilder(脏,状态: _FutureBuilderState#4fb8d): 预期值为'int'类型的值,但获得了'String'类型的值

如果我这样做的话:

mydata[1][1]

它给我一个空输出!

此代码有什么问题以及如何解决?

1 个答案:

答案 0 :(得分:1)

您的JSON在顶层表示一个数组,因为它以[开头。因此,您必须使用整数索引而不是字符串来访问元素。在第二层,您拥有的对象是地图。因此,我认为mydata[2]["2"]["mode"]应该给您“文本”。或者您希望通过某种访问从JSON输出什么?