use*_*349 2 dart flutter fluttermap
显示从具有搜索功能的第三方 API 获取的 A-List 错误仅在我运行应用程序时显示,它说 _InternalLinkedHashMap<String, dynamic>' 不是'Iterable 类型的子类型
请Welp *** Edit A new Error Showed after play the code this error shows type 'String' is not a subtype of type Map-dynamic, dynamic-
Future<Null> getStoreDetails() async {
var basicAuth = 'Basic ' +
base64Encode(utf8.encode('api_token_key'));
var result;
var response = await http.get(url, headers: {'authorization': basicAuth});
if (response.statusCode == 200) {
var responseJson = json.decode(response.body);
setState(() {
/Where the error is
for (Map storedetails in responseJson) {
_searchResult.add(StoreDetails.fromJson(storedetails));
}
});
} else if (response.statusCode != 200) {
result = "Error getting response:\nHttp status ${response.statusCode}";
print(result);
}
}
@override
void initState() {
super.initState();
getStoreDetails();
}
Run Code Online (Sandbox Code Playgroud)
数据模型类
class StoreDetails {
final int businessunitid;
String citydescription;
StoreDetails({
this.businessunitid,
this.citydescription,
});
factory StoreDetails.fromJson(Map<String, dynamic> data) {
return new StoreDetails(
businessunitid: data['businessunitid'],
citydescription: data['citydescription'],
);
}
}
Run Code Online (Sandbox Code Playgroud)
错误
E/flutter ( 3566): type '_InternalLinkedHashMap<String, dynamic>' is not a subtype of type 'Iterable<dynamic>'
E/flutter ( 3566): #0 SearchStoreState.getStoreDetails.<anonymous closure> (package:rsc_prototype/screens/searchstore_screen.dart:43:34)
E/flutter ( 3566): #1 State.setState (package:flutter/src/widgets/framework.dart:1125:30)
E/flutter ( 3566): #2 SearchStoreState.getStoreDetails (package:rsc_prototype/screens/searchstore_screen.dart:42:7)
E/flutter ( 3566): <asynchronous suspension>
E/flutter ( 3566): #3 SearchStoreState.initState (package:rsc_prototype/screens/searchstore_screen.dart:56:5)
E/flutter ( 3566): #4 StatefulElement._firstBuild (package:flutter/src/widgets/framework.dart:3751:58)
Run Code Online (Sandbox Code Playgroud)
的值responseJson是一张地图。您正在尝试对其进行for ... in处理,并且仅适用于可迭代对象,而地图不是可迭代对象。
您需要弄清楚您收到的 JSON 的结构。它可能包含您想要迭代的列表,或者您可能想要迭代responseJson.values。不知道格式和你想用它做什么是不可能知道的。
如果,正如您在下面的评论中所说,JSON 是单个对象,那么您的代码可能应该是:
...
setState(() {
_searchResult.add(StoreDetails.fromJson(responseJson));
});
...
Run Code Online (Sandbox Code Playgroud)
(我对 Flutter 不太了解,不知道对状态进行异步初始化是否是一种好习惯,但我认为它很危险 - 例如,小部件可能会在setState调用之前被销毁)。
| 归档时间: |
|
| 查看次数: |
9790 次 |
| 最近记录: |