ecp_net 0.1.1
ecp_net: ^0.1.1 copied to clipboard
基于 Dio 的网络请求二次封装库,提供统一错误处理、数据转换、请求状态回调、State 生命周期绑定等功能,内部项目通用的 Dart 网络请求工具库。
import 'package:dio/dio.dart';
import 'package:ecp_net/net.dart';
import 'package:flutter/material.dart';
import 'package:flutter_smart_dialog/flutter_smart_dialog.dart';
import 'api/api.dart';
import 'convert/rest_convert.dart';
import 'error/app_error_handler.dart';
import 'error/app_error_interceptor.dart';
import 'pages/home_page.dart';
void main() {
_initNetConfig();
runApp(const EcpNetExampleApp());
}
/// 全局网络配置:对应 `lib/src/net_config.dart` 的 [NetConfig] 单例。
void _initNetConfig() {
final config = NetConfig.instance;
// 1. 自定义 Convert:本示例对接裸 JSON 接口,注册直接取 response.data 的转换器。
// 若后端是 {code,message,data} 包裹格式,请删除此行使用默认 NetConvert。
config.convert = const RestConvert();
// 2. 自定义全局错误处理器(未设置 onError 时兜底提示)。
config.errorHandler = AppErrorHandler();
// 3. 自定义全局错误拦截器(返回 true 表示错误已被自行处理,返回 false 走默认流程)。
config.errorInterceptor = AppErrorInterceptor();
// 4. 动态设置全局请求头:每个请求发出前都会被调用。
config.dynamicHeader = (options, headers) async {
headers['X-Demo-Token'] = 'ecp_net-example';
};
// 5. 初始化 Dio 时追加一个日志拦截器,方便在控制台观察请求/响应。
config.initialDio = (dio) {
dio.interceptors.add(
LogInterceptor(requestBody: true, responseBody: true),
);
};
// 6. 全局加载弹窗文案(DialogRequest 未指定 loadingMsg 时使用)。
config.loadingMsg = '加载中,请稍候';
// 7. 配置全局 baseOptions 并重建 Dio 实例(该 setter 内部会创建新 Dio,
// 因此需放在 initialDio 之后,否则 initialDio 不会对新实例生效)。
config.baseOptions = BaseOptions(
baseUrl: Path.baseUrl,
connectTimeout: const Duration(seconds: 15),
receiveTimeout: const Duration(seconds: 15),
);
}
class EcpNetExampleApp extends StatelessWidget {
const EcpNetExampleApp({super.key});
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'ecp_net Example',
theme: ThemeData(colorSchemeSeed: Colors.indigo, useMaterial3: true),
home: const HomePage(),
// flutter_smart_dialog 初始化
navigatorObservers: [FlutterSmartDialog.observer],
builder: FlutterSmartDialog.init(),
);
}
}