Flutter网络请求管理插件flutter_network_engine的使用

Flutter网络请求管理插件flutter_network_engine的使用

安装

在你的 pubspec.yaml 文件中添加依赖:

dependencies:
    flutter_network_engine: ^0.1.2

基本配置

初始化网络引擎

var dioHttpEngine = DioHttpEngine(
    // 网络请求超时时间
    timeout: const Duration(seconds: 8),
    // 所有请求的基础URL
    baseUrl: "your base url", 
    // JSON解析函数
    jsonParser: ModelFactory.generateOBJ,
    // 启用日志记录
    printLog: true,
    // 错误处理回调
    onShowError: ({int? code, String? msg, dynamic error}) {},
    // 加载状态回调
    onShowLoading: (bool isShow, {String? msg}) {}
);

自定义响应处理

你可以自定义如何处理响应:

// 自定义状态码处理
ResponseResult.onGetCode = (ResponseResult result, Type dataType) {
    return result.response?.statusCode;
};

// 自定义消息处理
ResponseResult.onGetMessage = (ResponseResult result, Type dataType) {
    return result.response?.statusMessage;
};

// 自定义成功标准
ResponseResult.onIsSuccess = (ResponseResult result, Type dataType) {
    return result.response?.statusCode != null &&
           result.response!.statusCode! >= 200 &&
           result.response!.statusCode! < 300;
};

添加拦截器

例如添加一个日志拦截器:

dioHttpEngine.addInterceptor(TalkerDioLogger(
    settings: const TalkerDioLoggerSettings(
        printRequestHeaders: true,
        printResponseHeaders: true,
        printResponseMessage: true,
    ),
));

使用示例

发起网络请求

// GET 请求示例
String url = "https://api.example.com/data";
var param = {"key": "value"};
var resp = await dioHttpEngine.requestFuture<YourModel>(
    RequestMethod.get, 
    url,
    options: Options(
        headers: {
            "Content-Type": "application/json",
            "Accept": "application/json",
        },
    ),
    queryParameters: param
);

// 获取响应数据
var data = resp.getData();

错误处理

该框架通过 onShowError 回调提供了内置的错误处理功能。你可以根据错误代码或消息自定义错误处理方式:

DioHttpEngine(
    // 其他配置...
    onShowError: ({int? code, String? msg, dynamic error}) {
        // 根据错误代码或消息处理错误
        if (code == 404) {
            // 处理未找到错误
        } else if (code == 401) {
            // 处理未经授权错误
        }
        // 向用户显示错误信息
    }
);

加载状态

处理网络请求期间的加载状态:

DioHttpEngine(
    // 其他配置...
    onShowLoading: (bool isShow, {String? msg}) {
        if (isShow) {
            // 显示加载指示器
            // 可以使用可选的消息参数
        } else {
            // 隐藏加载指示器
        }
    }
);

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

1 回复

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


flutter_network_engine 是一个用于管理 Flutter 应用中的网络请求的插件。它封装了常见的网络请求操作,提供了简洁的 API,使得开发者可以更方便地进行网络请求的管理和处理。

以下是如何使用 flutter_network_engine 的基本步骤:

1. 添加依赖

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

dependencies:
  flutter:
    sdk: flutter
  flutter_network_engine: ^1.0.0  # 请根据最新版本替换

然后运行 flutter pub get 来获取依赖。

2. 初始化网络引擎

在你的应用中初始化 flutter_network_engine。通常可以在 main.dart 文件中进行初始化:

import 'package:flutter_network_engine/flutter_network_engine.dart';

void main() {
  NetworkEngine.init(
    baseUrl: 'https://api.example.com', // 设置基础URL
    timeout: Duration(seconds: 30), // 设置请求超时时间
    headers: {
      'Authorization': 'Bearer your_token_here', // 设置默认的请求头
    },
  );
  runApp(MyApp());
}

3. 发起网络请求

你可以使用 NetworkEngine 提供的各种方法来发起网络请求,例如 GETPOSTPUTDELETE 等。

GET 请求示例

import 'package:flutter_network_engine/flutter_network_engine.dart';

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

POST 请求示例

import 'package:flutter_network_engine/flutter_network_engine.dart';

Future<void> postData() async {
  try {
    var response = await NetworkEngine.post('/users', data: {
      'name': 'John Doe',
      'email': 'john@example.com',
    });
    print('Response data: ${response.data}');
  } catch (e) {
    print('Error: $e');
  }
}

处理请求参数和响应

flutter_network_engine 支持将请求参数自动转换为 JSON,并且可以处理 JSON 格式的响应数据。

4. 处理错误

flutter_network_engine 会自动捕获网络请求中的错误,并将其作为异常抛出。你可以通过 try-catch 块来捕获和处理这些错误。

try {
  var response = await NetworkEngine.get('/users');
  print('Response data: ${response.data}');
} catch (e) {
  print('Error: $e');
}

5. 自定义配置

你可以根据需要自定义 NetworkEngine 的配置,例如设置不同的基础 URL、超时时间、请求头等。

NetworkEngine.init(
  baseUrl: 'https://api.example.com',
  timeout: Duration(seconds: 30),
  headers: {
    'Authorization': 'Bearer your_token_here',
  },
);

6. 使用拦截器

flutter_network_engine 支持拦截器功能,允许你在请求发送前或响应接收后进行一些自定义操作。

NetworkEngine.addInterceptor(
  onRequest: (RequestOptions options) {
    // 在请求发送前做一些操作
    print('Request: ${options.url}');
    return options;
  },
  onResponse: (Response response) {
    // 在响应接收后做一些操作
    print('Response: ${response.data}');
    return response;
  },
);

7. 取消请求

你可以通过 CancelToken 来取消网络请求。

var cancelToken = CancelToken();

Future<void> fetchData() async {
  try {
    var response = await NetworkEngine.get('/users', cancelToken: cancelToken);
    print('Response data: ${response.data}');
  } catch (e) {
    if (CancelToken.isCancel(e)) {
      print('Request was cancelled');
    } else {
      print('Error: $e');
    }
  }
}

// 取消请求
cancelToken.cancel();
回到顶部