使用提供程序在Flutter中解析JSON数组时发生错误

时间:2020-05-27 13:00:07

标签: arrays json flutter flutter-provider

我想在我的flutter项目中使用json数组,但这总是像这样的错误

_TypeError (type 'List<dynamic>' is not a subtype of type 'FutureOr<ProvinsiModel>')

我对这个项目的期望是,当我单击一个小部件时,我的意思是它下面将在flutter上打开一个新页面并显示从json数组中获取的列表。

在我的代码中没有错误,但是仅当我单击并切换到另一页时,VSCode中的调试模式突然停止,并在PopUp中显示类似上面的错误。

这是我拥有的代码

提供者

class IndonesianProvinsiProvider with ChangeNotifier {
var api = ApiServices();
ProvinsiModel indonesia;

Future<ProvinsiModel> getIndonesianProvinsiProvider() async {
  final response = await api.client.get("${api.baseUrl}/indonesia/");
  if (response.statusCode == 200) {
    notifyListeners();
    final data = jsonDecode(response.body);
    return data;
  } else {
    return null;
  }
}
}

我将使用的数据页面

class ProvinsiPage extends StatelessWidget {

  final List<ProvinsiModel> data;

  const ProvinsiPage({Key key, this.data}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return Container(
      child: ListView.builder(
        itemCount: data.length,
        itemBuilder: (context, index) {
          return Card(
            child: Column(
              children: <Widget>[
                Card(child: Text(data[index].attributes.provinsi))
              ],
            ),
          );
        },
      )
    );
  }
}

我将这些数据称为future和future.builder()

GestureDetector(
  onTap: () {
    Navigator.push(
      context, MaterialPageRoute(
        builder: (context) => FutureBuilder (
          future: Provider.of<IndonesianProvinsiProvider>(context, listen: false).getIndonesianProvinsiProvider(),
          builder: (context, snapshot) {
            if (snapshot.data == null) {              // Cek jika snapshot tidak menerima data atau null
              return Center(                          // maka
                child: CircularProgressIndicator(),   // menampilkan loading
              );
            } else {                  // maka
              return ProvinsiPage(                   // data dikirim ke class PostinganList
                data: snapshot.data,
              );
            }
          }
        )
        ),
    );
  },
  child: IndonesiaStatsWidget (
    bgColor: Colors.redAccent,
    indo: Provider.of<IndonesianProvider>(context).indonesia,
    widgetBgColor: Colors.white,
  ),
),

对于我从提供商那里获得的json的请求

[
    {
        "attributes": {
            "FID": 11,
            "Kode_Provi": 31,
            "Provinsi": "DKI Jakarta",
            "Kasus_Posi": 6895,
            "Kasus_Semb": 1682,
            "Kasus_Meni": 509
        }
    },
    {
        "attributes": {
            "FID": 15,
            "Kode_Provi": 35,
            "Provinsi": "Jawa Timur",
            "Kasus_Posi": 4142,
            "Kasus_Semb": 522,
            "Kasus_Meni": 320
        }
    },
    ....
]

0 个答案:

没有答案