Flutter网络请求辅助插件dio_helper_flutter的使用

Flutter网络请求辅助插件dio_helper_flutter的使用

dio_helper_flutter 是一个用于简化网络请求的辅助类,支持 GET, POST, DELETE, 和 PUT 请求。本文将通过具体的示例展示如何使用该插件进行网络请求。

环境配置

首先,确保在 pubspec.yaml 文件中添加了 diodio_helper_flutter 依赖:

dependencies:
  dio: ^4.0.0
  dio_helper_flutter: ^1.0.0

然后运行 flutter pub get 来安装这些依赖。

使用示例

初始化

创建一个 ApiRepository 实例来处理所有的网络请求:

import 'package:dio/dio.dart';
import 'package:dio_helper_flutter/dio_helper_flutter.dart';

var apiRepository = ApiRepository(ApiProvider(DioHelper(Dio())));
String mainUrl = 'https://api.first.org/data/v1/';

GET 请求

// 调用GET方法
apiRepository.getApi('${mainUrl}countries', success: (response) {
  print('Success: $response');
}, error: (error) {
  print('Error ${error.errorLanguageEntity!.defaultLanguage} ${error.statusCode}');
});

POST 请求

基本POST请求

// 调用POST方法
apiRepository.postApi('${mainUrl}countries', success: (response) {
  print('Success: $response');
}, error: (error) {
  print('Error ${error.errorLanguageEntity!.defaultLanguage} ${error.statusCode}');
});

带查询参数的POST请求

// 调用带查询参数的POST方法
apiRepository.postApi('${mainUrl}countries',
    queryParameters: {'param1': 'value1', 'param2': 'value2'}, // 查询参数
    success: (response) {
  print('Success: $response');
}, error: (error) {
  print('Error ${error.errorLanguageEntity!.defaultLanguage} ${error.statusCode}');
});

带JSON数据的POST请求

// 调用带JSON数据的POST方法
apiRepository.postApi('${mainUrl}countries', data: {"key": "value"}, success: (response) {
  print('Success: $response');
}, error: (error) {
  print('Error ${error.errorLanguageEntity!.defaultLanguage} ${error.statusCode}');
});

图片/文件上传

// 创建FormData对象
FormData formData = FormData.fromMap({
  "name": "",
  "age": 1,
  "file": await MultipartFile.fromFile("./flutter.png", filename: "flutter.png"),
});

// 调用带文件上传的POST方法
apiRepository.imageUpload('${mainUrl}countries',
    formData: formData,
    success: (response) {
  print('Success: $response');
}, error: (error) {
  print('Error ${error.errorLanguageEntity!.defaultLanguage} ${error.statusCode}');
});

错误处理

dio_helper_flutter 提供了一些预定义的错误常量,以便于识别常见的错误类型:

const requestCancelError = 'Request cancellation';
const connectionTimeOutError = 'Connection timed out';
const requestTimeOutError = 'Request timed out';
const responseTimeOutError = 'Response timeout';
const checkInternetConnectionError = 'Check your internet connection';
const requestSyntaxError = 'Request syntax error';
const serverRefusedError = 'Server refused to execute';
const dataNotAvailableError = 'Data not available';
const requestForbiddenError = 'Request method is forbidden';
const serverInternalError = 'Server internal error';
const invalidRequestError = 'Invalid request';
const serverDownError = 'Server is down';
const notSupportHTTPError = 'Does not support HTTP protocol request';
const unknownMistakeError = 'Unknown mistake';
const unknownError = 'Unknown error';

更多关于Flutter网络请求辅助插件dio_helper_flutter的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter网络请求辅助插件dio_helper_flutter的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


dio_helper_flutter 是一个基于 dio 的 Flutter 网络请求辅助插件,它简化了网络请求的配置和处理,使得在 Flutter 应用中进行网络请求变得更加方便。dio 是一个强大的 Dart 网络请求库,支持拦截器、全局配置、FormData、文件上传下载等功能。

安装 dio_helper_flutter

首先,你需要在 pubspec.yaml 文件中添加 dio_helper_flutter 依赖:

dependencies:
  flutter:
    sdk: flutter
  dio_helper_flutter: ^1.0.0

然后运行 flutter pub get 来安装依赖。

基本使用

  1. 初始化 DioHelper

    在应用启动时,你可以初始化 DioHelper,并配置一些全局参数,比如 baseUrl、超时时间等。

    import 'package:dio_helper_flutter/dio_helper_flutter.dart';
    
    void main() {
      DioHelper.init(
        baseUrl: 'https://jsonplaceholder.typicode.com',
        connectTimeout: 5000,
        receiveTimeout: 3000,
      );
      runApp(MyApp());
    }
    
  2. 发起 GET 请求

    你可以使用 DioHelper 发起 GET 请求,并处理响应数据。

    Future<void> fetchData() async {
      try {
        Response response = await DioHelper.get('/posts');
        print(response.data);
      } catch (e) {
        print('Error: $e');
      }
    }
    
  3. 发起 POST 请求

    POST 请求也可以通过 DioHelper 轻松发起。

    Future<void> postData() async {
      try {
        Response response = await DioHelper.post(
          '/posts',
          data: {
            'title': 'foo',
            'body': 'bar',
            'userId': 1,
          },
        );
        print(response.data);
      } catch (e) {
        print('Error: $e');
      }
    }
    
  4. 处理请求头

    你可以在请求中添加自定义的请求头。

    Future<void> fetchDataWithHeaders() async {
      try {
        Response response = await DioHelper.get(
          '/posts',
          options: Options(headers: {'Authorization': 'Bearer token'}),
        );
        print(response.data);
      } catch (e) {
        print('Error: $e');
      }
    }
    
  5. 拦截器

    DioHelper 支持拦截器,你可以在请求发送前或响应接收后执行一些操作。

    DioHelper.addInterceptor(InterceptorsWrapper(
      onRequest: (RequestOptions options, RequestInterceptorHandler handler) {
        // 在请求发送前做一些处理
        print('Request: ${options.uri}');
        handler.next(options);
      },
      onResponse: (Response response, ResponseInterceptorHandler handler) {
        // 在响应接收后做一些处理
        print('Response: ${response.data}');
        handler.next(response);
      },
      onError: (DioError error, ErrorInterceptorHandler handler) {
        // 在请求出错时做一些处理
        print('Error: ${error.message}');
        handler.next(error);
      },
    ));
    
  6. 文件上传

    DioHelper 也支持文件上传。

    Future<void> uploadFile() async {
      FormData formData = FormData.fromMap({
        'file': await MultipartFile.fromFile('/path/to/file', filename: 'upload.txt'),
      });
    
      try {
        Response response = await DioHelper.post(
          '/upload',
          data: formData,
        );
        print(response.data);
      } catch (e) {
        print('Error: $e');
      }
    }
回到顶部