我正在尝试从Future
Exception: type 'List<dynamic>' is not a subtype of type 'FutureOr<String>'
这是返回Future
class EtablissementController{
Future<String> AfficherEtablissement() async {
final response =
await http.get('http://10.0.2.2:8080/api/getetab');
if (response.statusCode == 200) {
return json.decode(response.body);
} else {
throw Exception('Failed to load');
}
}
}
在这里,我正在调用此方法并填充返回的数据:
etabController = EtablissementController() ;
//fetching data
etabController.AfficherEtablissement().then((value) => {
print("Fetched values: "+value)
}) ;
//fetching data
答案 0 :(得分:3)
问题是您要通过这种方式返回其他类型的数据
// this is a json decoded data, not String
return json.decode(response.body);
,并在您的通用数据类型中为您的将来提到了返回数据类型字符串
Future<String> AfficherEtablissement() async {}
尝试,为您的方法AfficherEtablissement()
声明正确的数据类型。
建议:将您的方法名称用作camelCase
。良好的飞镖练习,您可以在这里阅读有关飞镖指南的更多信息:Effective Dart
// return the dynamic data type
Future<dynamic> AfficherEtablissement() async {
final response =
await http.get('http://10.0.2.2:8080/api/getetab');
if (response.statusCode == 200) {
return json.decode(response.body);
} else {
throw Exception('Failed to load');
}
}
当您获取数据或打印数据时,必须通过toString()
将其更改为String,因为您获得了动态数据类型,但是在打印时,它需要String
etabController.AfficherEtablissement().then((value) => {
print("Fetched values: "+value.toString());
});
答案 1 :(得分:0)
不确定您的反应是什么,但是您可以typecast
Future<String> AfficherEtablissement() async {
final response =
await http.get('http://10.0.2.2:8080/api/getetab');
if (response.statusCode == 200) {
return json.decode(response.body) as String; // it should return String response.
} else {
throw Exception('Failed to load');
}
}