首页 > 解决方案 > 如何在 Flutter 中使用改造

问题描述

我正在尝试使用 Flutter 中的改造进行 API 调用我已经在 pubspec.yaml 中包含以下库

dependencies:    
 retrofit: ^1.3.4+1
 json_annotation: ^3.1.1
 dio: ^3.0.10
 logger: ^0.9.4
 built_value: ^7.1.0

dev_dependencies:
 retrofit_generator: ^1.4.1
 build_runner: ^1.10.0
 json_serializable: ^3.5.0
 built_value_generator: ^7.1.0

并创建了以下类 api_client.dart

@RestApi(baseUrl: "https://gorest.co.in/public-api/")
abstract class ApiClient {
  factory ApiClient(Dio dio, {String baseUrl}) = _ApiClient;

}

我还生成了 api_client.g.dart

part of 'api_client.dart';

// **************************************************************************
// RetrofitGenerator
// **************************************************************************

class _ApiClient implements ApiClient {
  _ApiClient(this._dio, {this.baseUrl}) {
    ArgumentError.checkNotNull(_dio, '_dio');
    baseUrl ??= 'https://gorest.co.in/public-api/';
  }

  final Dio _dio;

  String baseUrl;
}

就是这样,我被卡住了。现在我不知道如何进行 Get 和 Post 调用,有人可以帮我解决这个问题

  1. 如何发出 Get 请求?
  2. 如何发出 Post 请求以及如何为 body 提供值?
  3. 如何处理来自 API 的响应?
  4. 如何使用基本身份验证?

标签: jsonapiflutterretrofitflutter-dependencies

解决方案


在颤振中进行改造:

项目依赖:

    dependencies:
       flutter:
     sdk: flutter
      cupertino_icons: ^1.0.2
      dio: ^4.0.0
      json_serializable: ^4.1.4
      retrofit: ^2.0.0
      logger: ^1.0.0
      json_annotation: ^4.0.1
      retrofit_generator: ^2.0.0+3
      build_runner: ^2.0.5

ApiRequest.dart 文件

  @RestApi(baseUrl: "https://gorest.co.in/public-api/")
  abstract class ApiRequest{
  factory ApiRequest(Dio dio,{required String baseUrl}) =_ApiRequest;

  @GET("/users")
  Future<ResponseData> getUsers();

  }

apirequest.g.dart 文件代码:

   part of 'apirequest.dart';

   class _ApiRequest implements ApiRequest {
         _ApiRequest(this._dio, {required this.baseUrl}) {
             ArgumentError.checkNotNull(_dio, '_dio');
             this.baseUrl = 'https://gorest.co.in/public-api/';
   }

   final Dio _dio;

   String baseUrl;

   @override
   getUsers() async {
       const _extra = <String, dynamic>{};
       final queryParameters = <String, dynamic>{};
       final _data = <String, dynamic>{};

       var options=Options(
            receiveTimeout: 1000,sendTimeout: 1000,
            method: 'GET',
            headers: <String, dynamic>{},
            extra: _extra,

       );
      final _result = await _dio.request('$baseUrl/users',
             queryParameters: queryParameters,
             options: options,

             data: _data);
      final value = ResponseData.fromJson(_result.data);
      return value;
     }
    }

我有一个解决方案,在 Github 上更新了完整的源代码。您可以通过我的 Github 帐户链接获取代码,请点击此处。

https://github.com/NishaJain24/Retrofit_Flutter


推荐阅读