'List <dynamic>'类型不是'FutureOr <String>'类型的子类型

时间:2020-08-06 11:11:08

标签: flutter dart

我正在尝试从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

2 个答案:

答案 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');
    }
  }