Ошибка при синтаксическом анализе JSON массива во флаттере с поставщиком - PullRequest
0 голосов
/ 27 мая 2020

Я хочу использовать массив json в моем проекте флаттера, но это всегда такая ошибка

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

чего я ожидаю от этого проекта, так это того, что когда я нажимаю на виджет, я имею в виду под ним откроет новую страницу при флаттере и отобразит список, взятый из массива json.

в моем коде нет ошибки, но только когда я нажимаю и переключаюсь на другую страницу, режим отладки в VSCode внезапно останавливается и отображает ошибку, подобную приведенной выше, в PopUp.

, и это код, который у меня есть

provider

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;
  }
}
}

page для данных, которые я буду использовать

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
        }
    },
    ....
]
...