Flutter工具集插件nd_dio_utils的使用

nd_dio_utils是一个为 dio库设计的小型实用工具库。它可以帮助开发者更方便地处理网络请求,简化代码逻辑,并提供一些额外的功能来增强 dio的功能。

安装

首先,在您的 pubspec.yaml 文件中添加依赖:

dependencies:
  nd_dio_utils: ^1.0.0

然后运行以下命令以安装依赖:

flutter pub get

使用

初始化Dio实例

在使用 nd_dio_utils之前,我们需要初始化一个 Dio实例,并配置必要的拦截器和选项。

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

void main() async {
  // 初始化Dio实例
  final dio = Dio();

  // 配置基础URL(如果需要)
  dio.options.baseUrl = "https://api.example.com/";

  // 添加默认的拦截器
  dio.interceptors.add(DioInterceptor());

  // 使用nd_dio_utils提供的方法发送请求
  final response = await dio.get("users");

  // 打印响应数据
  print(response.data);
}

发送GET请求

nd_dio_utils 提供了封装好的方法来简化 GET 请求的发送。

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

void main() async {
  final dio = Dio();
  dio.interceptors.add(DioInterceptor());

  try {
    // 发送GET请求
    final response = await dio.get("users");

    // 打印响应数据
    print(response.data);
  } catch (e) {
    // 捕获并处理错误
    print("Error: $e");
  }
}

发送POST请求

同样,nd_dio_utils 也提供了封装好的方法来简化 POST 请求的发送。

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

void main() async {
  final dio = Dio();
  dio.interceptors.add(DioInterceptor());

  try {
    // 发送POST请求
    final response = await dio.post("login", data: {"username": "test", "password": "123456"});

    // 打印响应数据
    print(response.data);
  } catch (e) {
    // 捕获并处理错误
    print("Error: $e");
  }
}

处理异常

nd_dio_utils 提供了一些内置的错误处理机制,可以捕获常见的网络错误。

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

void main() async {
  final dio = Dio();
  dio.interceptors.add(DioInterceptor());

  try {
    // 发送请求
    final response = await dio.get("nonexistent_endpoint");

    // 打印响应数据
    print(response.data);
  } on DioError catch (e) {
    // 捕获Dio错误
    if (e.type == DioErrorType.connectTimeout) {
      print("连接超时");
    } else if (e.type == DioErrorType.receiveTimeout) {
      print("接收超时");
    } else if (e.type == DioErrorType.response) {
      print("服务器返回错误: ${e.response?.statusCode}");
    } else {
      print("其他错误: $e");
    }
  } catch (e) {
    // 捕获其他错误
    print("未知错误: $e");
  }
}

更多关于Flutter工具集插件nd_dio_utils的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter工具集插件nd_dio_utils的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


nd_dio_utils 是一个基于 dio 的 Flutter 工具集插件,旨在简化网络请求的处理。它提供了一些常用的功能,如请求拦截、错误处理、日志记录等,帮助开发者更高效地处理网络请求。

安装

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

dependencies:
  flutter:
    sdk: flutter
  nd_dio_utils: ^1.0.0  # 请使用最新版本

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

基本使用

1. 初始化 DioUtils

在使用 nd_dio_utils 之前,你需要初始化 DioUtils。通常你可以在应用的 main.dart 文件中进行初始化:

import 'package:nd_dio_utils/nd_dio_utils.dart';

void main() {
  DioUtils().init(
    baseUrl: 'https://jsonplaceholder.typicode.com',
    interceptors: [
      LogInterceptor(), // 添加日志拦截器
    ],
  );
  runApp(MyApp());
}

2. 发起网络请求

DioUtils 提供了多种方法来发起网络请求,如 getpostputdelete 等。

import 'package:nd_dio_utils/nd_dio_utils.dart';

Future<void> fetchData() async {
  try {
    var response = await DioUtils().get('/posts/1');
    print(response.data);
  } catch (e) {
    print('Error: $e');
  }
}

3. 处理请求参数

你可以通过 options 参数来设置请求头、超时时间等:

var response = await DioUtils().get(
  '/posts/1',
  options: Options(
    headers: {'Authorization': 'Bearer your_token'},
    sendTimeout: 5000,
    receiveTimeout: 5000,
  ),
);

4. 处理错误

nd_dio_utils 提供了统一的错误处理机制。你可以通过 catchError 方法来捕获和处理错误:

try {
  var response = await DioUtils().get('/posts/1');
  print(response.data);
} on DioError catch (e) {
  print('DioError: ${e.message}');
} catch (e) {
  print('Error: $e');
}

5. 使用拦截器

nd_dio_utils 支持自定义拦截器。你可以在初始化时添加拦截器,或者在运行时动态添加:

DioUtils().addInterceptor(LogInterceptor());

6. 取消请求

你可以通过 CancelToken 来取消请求:

var cancelToken = CancelToken();

DioUtils().get(
  '/posts/1',
  cancelToken: cancelToken,
);

// 取消请求
cancelToken.cancel('Request cancelled');

高级功能

1. 文件上传

nd_dio_utils 支持文件上传:

var formData = FormData.fromMap({
  'file': await MultipartFile.fromFile('path/to/file'),
});

var response = await DioUtils().post(
  '/upload',
  data: formData,
);

2. 文件下载

nd_dio_utils 也支持文件下载:

var response = await DioUtils().download(
  'https://example.com/file.zip',
  'path/to/save/file.zip',
);

3. 自定义请求拦截器

你可以自定义拦截器来处理请求和响应:

class CustomInterceptor extends Interceptor {
  [@override](/user/override)
  void onRequest(RequestOptions options, RequestInterceptorHandler handler) {
    // 在请求发送之前处理
    super.onRequest(options, handler);
  }

  [@override](/user/override)
  void onResponse(Response response, ResponseInterceptorHandler handler) {
    // 在响应返回之后处理
    super.onResponse(response, handler);
  }

  [@override](/user/override)
  void onError(DioError err, ErrorInterceptorHandler handler) {
    // 在请求出错时处理
    super.onError(err, handler);
  }
}

DioUtils().addInterceptor(CustomInterceptor());
回到顶部