flutter 如何在使用dio/retrofit时更改_dio.fetch中响应类型?

0g0grzrc  于 2022-12-14  发布在  Flutter
关注(0)|答案(1)|浏览(344)

我使用dio,retrofit来管理API连接。生成与注解和build_runner相关的代码。
我的问题:我在响应中收到一个数据列表。生成的代码与我需要的代码不同。生成的代码中有一个部分包含此文本。

final _result = await _dio.fetch<Map<String, dynamic>>(_setStreamType<

而我需要的代码是这样的。

final _result = await _dio.fetch<List<dynamic>>(_setStreamType<
  • 当我手动编辑 Map〈String,dynamic〉List〈‍dynamic〉 时,我的代码工作正常,我需要像注解等自动做的东西将解决这个问题。

这是我的代码片段:

@RestApi(baseUrl: BuildConfig.SERVER)
abstract class GetApiService {
  factory GetApiService(Dio dio,{String baseUrl}) = _GetApiService;
  @GET(MainApi.baseData)
  @FormUrlEncoded()
  Future<HttpResponse<ResponseList>> getDashboardHomeResponse();
}

收到我的回应范例:

[
    {
          'key1':'value1',
          'key2':'value2',
          'key3':'value3'
    }
 ]
2j4z5cfb

2j4z5cfb1#

我解决问题。
你给予http响应的数据类型必须是List类型。所以你的dio响应是 List〈‍dynamic〉
否则,响应生成器将返回一个 Map〈String,dynamic〉 类型。
我的错误在于将数据类型传递给HttpResponse
我传递给HttpResponse的类模型有一个列表类型变量,但是我必须单独创建类模型。
这是我编辑的代码片段:

@RestApi(baseUrl: BuildConfig.SERVER)
abstract class GetApiService {
  factory GetApiService(Dio dio,{String baseUrl}) = _GetApiService;
  @GET(MainApi.baseData)
  @FormUrlEncoded()
  Future<HttpResponse<List<ResponseItem>>> getDashboardHomeResponse(); ///Pay attention to the type , Type is List!
}

相关问题