Flutter/Dart Error - NoSuchMethodError (NoSuchMethodError: Class 'String' has no instance method 'map'
Flutter/Dart Error - NoSuchMethodError (NoSuchMethodError: Class 'String' has no instance method 'map'
我收到一个与 Flutter/Dart 内的 JSON 接收器有关的错误。
由于完整的 json 回复非常长,因此不得不在文档文件中共享。它有 15 列 error log
详情Class
class Detail {
String kodkursus;
String namakursus;
String kursusdescription;
Detail(
{required this.kodkursus,
required this.namakursus,
required this.kursusdescription});
factory Detail.fromJson(Map<String, dynamic> json) {
return Detail(
kodkursus: json['crs_code'] as String,
namakursus: json['crs_title_bm'] as String,
kursusdescription: json['crs_description_bm'] as String,
);
}
}
代码
Future<dynamic> generateDetailList() async {
var url = 'http://10.0.2.2:81/login_testing/kursus_display.php';
var data = {'usr_id': widget.username2};
var response = await http.post(url, body: json.encode(data));
var list = json.decode(json.encode(response.body));
List<Detail> _detail =
list.map<Detail>((json) => Detail.fromJson(json)).toList();
detailDataSource = DetailDataSource(_detail);
return _detail;
}
Return(满error log)
NoSuchMethodError (NoSuchMethodError: Class 'String' has no instance method 'map'...
我对这个 Flutter/Dart 很陌生,但我觉得它与 json 有关,只是我无法理解它
请检查您的 API 回复,因为当数据类型不同时会产生此错误。
此错误表明您的应用程序在字符串中响应它,并且您正在以地图的形式访问它,因此请检查您的 API 响应或
尝试替换这个:
var list = json.decode(json.encode(response.body));
与 :
var list = json.decode(response.body);
因为 json.encode 方法对所有列表数据进行编码,并且值数据类型是字符串,所以它会出错。
将您的函数 generateDetailList
替换为:
Future<List<Detail>?> generateDetailList() async {
Uri url = Uri.parse('http://10.0.2.2:81/login_testing/kursus_display.php');
Map<String, String> data = {'usr_id': 'widget.username2'};
http.Response response = await http.post(url, body: json.encode(data));
// var list = json.decode(json.encode(response.body));
var responseMap = await jsonDecode(response.body);
if (response.statusCode == 200) {
List<Detail> _details =
responseMap.map<Detail>((x) => Detail.fromJson(x)).toList();
return _details;
} else {
return null;
}
}
并且尽量不要到处使用 var。
我收到一个与 Flutter/Dart 内的 JSON 接收器有关的错误。
由于完整的 json 回复非常长,因此不得不在文档文件中共享。它有 15 列 error log
详情Class
class Detail {
String kodkursus;
String namakursus;
String kursusdescription;
Detail(
{required this.kodkursus,
required this.namakursus,
required this.kursusdescription});
factory Detail.fromJson(Map<String, dynamic> json) {
return Detail(
kodkursus: json['crs_code'] as String,
namakursus: json['crs_title_bm'] as String,
kursusdescription: json['crs_description_bm'] as String,
);
}
}
代码
Future<dynamic> generateDetailList() async {
var url = 'http://10.0.2.2:81/login_testing/kursus_display.php';
var data = {'usr_id': widget.username2};
var response = await http.post(url, body: json.encode(data));
var list = json.decode(json.encode(response.body));
List<Detail> _detail =
list.map<Detail>((json) => Detail.fromJson(json)).toList();
detailDataSource = DetailDataSource(_detail);
return _detail;
}
Return(满error log)
NoSuchMethodError (NoSuchMethodError: Class 'String' has no instance method 'map'...
我对这个 Flutter/Dart 很陌生,但我觉得它与 json 有关,只是我无法理解它
请检查您的 API 回复,因为当数据类型不同时会产生此错误。
此错误表明您的应用程序在字符串中响应它,并且您正在以地图的形式访问它,因此请检查您的 API 响应或
尝试替换这个:
var list = json.decode(json.encode(response.body));
与 :
var list = json.decode(response.body);
因为 json.encode 方法对所有列表数据进行编码,并且值数据类型是字符串,所以它会出错。
将您的函数 generateDetailList
替换为:
Future<List<Detail>?> generateDetailList() async {
Uri url = Uri.parse('http://10.0.2.2:81/login_testing/kursus_display.php');
Map<String, String> data = {'usr_id': 'widget.username2'};
http.Response response = await http.post(url, body: json.encode(data));
// var list = json.decode(json.encode(response.body));
var responseMap = await jsonDecode(response.body);
if (response.statusCode == 200) {
List<Detail> _details =
responseMap.map<Detail>((x) => Detail.fromJson(x)).toList();
return _details;
} else {
return null;
}
}
并且尽量不要到处使用 var。