问题描述
很抱歉,如果重复了这个问题,但是我没有找到解决方法。
错误:
异常:类型'(dynamic)=> PostalModel'不是类型的子类型 '(f )=>列表'
我所做的事情:
-
调用API:
Future<PostalModel> fetchPhotos(http.Client client) async { final response = await client.get('https://api.postalpincode.in/pincode/364710'); // Use the compute function to run parsePhotos in a separate isolate. return compute(parsePostalPincode,response.body); }
-
解析JSON:
// A function that converts a response body into a List. PostalModel parsePostalPincode(String responseBody) { print(responseBody); final parsed = jsonDecode(responseBody).cast<Map<String,dynamic>>(); print('Parsed : $parsed'); //Getting Log OUTPUT PostalModel postalModel = parsed.map<List<PostalModel>>((json) => PostalModel.fromJson(json)); print('Postal Model : $postalModel'); //Getting Log OUTPUT return postalModel; }
-
将数据绑定到正文中
body: FutureBuilder<PostalModel>( future: fetchPhotos(http.Client()),builder: (context,snapshot) { print('snapshot $snapshot'); // Getting Error Here // "AsyncSnapshot<PostalModel>(ConnectionState.done,null,Exception: type '(dynamic) => PostalModel' is not a subtype of type '(Map<String,dynamic>) => List<PostalModel>' of 'f')" if (snapshot.hasError) print(snapshot.error); return snapshot.hasData ? PostOfficeList(postOfficeList: snapshot.data.postOffice) : Center(child: CircularProgressIndicator()); },),
您可以从API链接检查JSON,并且我已经从here创建了一个Model类。
解决方法
API返回JSON数组,而不是JSON对象,所以它是List,而不是Map。
即如果您的模型类名称是User,则User JSON是JSON Array的第一个元素。
因此要获取第一个元素,请使用第一个索引。内部获取信息更新
return Users.fromJson(jsonresponse[0]);
,
最后,我成功实现了以下解决方案:
// A function that converts a response body into a List.
PostalModel parsePostalPincode(String responseBody) {
final parsed = jsonDecode(responseBody).cast<Map<String,dynamic>>();
print('Parsed : $parsed[0]');
PostalModel postalModel = PostalModel.fromJson(parsed[0]);
print('Postal Model : $postalModel');
return postalModel;
}
Flutter对于新手来说是如此疯狂。 :P