Flutter网络增强功能插件network_plus的使用
Flutter网络增强功能插件network_plus的使用
简介
network_plus
是一个强大的 Flutter 网络包,基于 DIO
构建,旨在通过缓存、日志记录、令牌认证和本地数据存储管理等功能简化 API 开发。
功能
- DIO Wrapper:简化 HTTP 请求和响应。
- Caching:高效缓存 API 响应以提升性能并减少网络使用。
- Logging:生成 cURL 命令方便调试,并使用
Log.d
和Log.i
记录网络请求。 - Token Authentication:无缝管理访问令牌和刷新令牌。
- Retry Policies:根据自定义策略自动重试失败的请求。
- Base Models:利用抽象基类处理请求和响应。
- Local Storage Management:管理应用程序特定的数据存储。
安装
在 pubspec.yaml
文件中添加以下依赖项:
dependencies:
network_plus: ^1.0.0
执行 flutter pub get
安装依赖。
入门指南
配置
为了使用该插件,需要配置依赖注入并初始化核心配置。以下是示例设置:
// 配置核心依赖注入
coreDILocator.registerLazySingleton<CoreConfiguration>(() => CoreConfiguration(
baseUrl: coreDILocator<AppEnvironment>().brandConfig.url.orEmpty(),
timeout: 120000,
connectTimeout: 120000,
cachePolicy: coreDILocator<AppEnvironment>().env == EnvironmentType.prod ||
coreDILocator<AppEnvironment>().env == EnvironmentType.dev
? CachePolicy.request
: CachePolicy.noCache,
refreshTokenUrl: authUrl,
refreshTokenKey: "refresh_token",
accessTokenKey: "access_token",
securityContext: _securityContext,
additionalHeaders: {
// 添加自定义头信息
"locale": "en",
"unique-reference-code": "GUID",
},
storageProviderForToken: StorageProvider.sharedPref,
loggerConfig: const LoggerConfig(
shouldShowLogs: kDebugMode,
logLevel: LogsLevel.trace,
lineLength: 1000,
),
));
// 获取 CoreConfiguration 实例
final core = coreDILocator<CoreConfiguration>();
// 注册网络相关的依赖项
core.setup();
创建自定义仓库
您可以扩展 BaseRepository
类来创建自己的仓库。以下是示例代码:
class MyCustomRepository extends BaseRepository<GlobalMasterConfigData> {
MyCustomRepository(NetworkExecutor networkExecutor) : super(networkExecutor);
Future<Result<MyUiModel>> fetchData() async {
final additionalHeaders = {
'Authorization': 'Bearer your_token',
};
return await execute<MyMapper, GlobalMasterConfigData, MyUiModel>(
urlPath: '/api/data',
method: METHOD_TYPE.GET,
params: EmptyRequest(),
mapper: MyMapper(),
responseType: GlobalMasterConfigData(),
headers: additionalHeaders,
cachePolicy: CachePolicy.cacheFirst,
retryPolicy: RetryPolicy(retrialCount: 3, retryDelay: Duration(seconds: 2)),
);
}
}
高级功能
API 缓存
插件支持缓存以提高性能。可以在调用 execute
方法时指定缓存行为:
cachePolicy: CachePolicy.cacheFirst,
更新头部信息
可以通过传递额外的头部信息来自定义请求头部:
final additionalHeaders = {
'Authorization': 'Bearer your_token',
};
重试策略
内置的重试策略允许您定义重试次数和每次重试之间的延迟:
retryPolicy: RetryPolicy(retrialCount: 3, retryDelay: Duration(seconds: 2)),
日志记录
通过 LoggerConfig
配置日志行为,便于跟踪请求和响应:
loggerConfig: const LoggerConfig(
shouldShowLogs: kDebugMode,
logLevel: LogsLevel.trace,
lineLength: 1000,
)
使用 Log.d
, Log.i
, 和 Log.e
在不同级别记录消息:
Log.d('This is debug message');
Log.i('This is info message');
Log.e('This is error message');
本地存储设置
可以通过创建自己的 AppDataStorage
类来管理本地数据存储。以下是一个简单的实现示例:
在 locator
中设置本地存储依赖项:
coreDILocator.registerLazySingleton<LocalStorageService>(() {
final storageManager = LocalStorageManager();
storageManager.addService(SharedPrefStorageProvider());
storageManager.init();
return storageManager;
});
/// 使用 GetIt 设置本地存储依赖项
coreDILocator.registerLazySingleton<AppDataStorage>(
() => AppDataStorage(coreDILocator<LocalStorageService>(), StorageProvider.sharedPref),
);
class AppDataStorage {
final LocalStorageService localStorage;
final StorageProvider provider;
AppDataStorage(this.localStorage, this.provider);
Future<void> saveMyAppData(String key, dynamic value) async {
await localStorage.saveData(StorageData({key: value}, provider));
}
Future<T?> getValueByKey<T>(String key) async {
return await localStorage.getData<T>(key, provider);
}
Future<void> clearValue(String key) async {
await localStorage.removeData(key, provider);
}
}
更多关于Flutter网络增强功能插件network_plus的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter网络增强功能插件network_plus的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
network_plus
是一个 Flutter 插件,用于增强网络请求功能。它基于 http
包,提供了更多的功能和便利性,例如自动重试、超时设置、缓存、拦截器等。以下是如何使用 network_plus
插件的基本步骤:
1. 添加依赖
首先,在 pubspec.yaml
文件中添加 network_plus
依赖:
dependencies:
flutter:
sdk: flutter
network_plus: ^1.0.0 # 请检查最新版本
然后运行 flutter pub get
来安装依赖。
2. 导入包
在你的 Dart 文件中导入 network_plus
包:
import 'package:network_plus/network_plus.dart';
3. 创建 NetworkPlus 实例
你可以创建一个 NetworkPlus
实例来执行网络请求:
final networkPlus = NetworkPlus();
4. 发送 GET 请求
使用 get
方法发送 GET 请求:
void fetchData() async {
try {
final response = await networkPlus.get(Uri.parse('https://jsonplaceholder.typicode.com/posts'));
if (response.statusCode == 200) {
print('Response data: ${response.body}');
} else {
print('Request failed with status: ${response.statusCode}');
}
} catch (e) {
print('Error: $e');
}
}
5. 发送 POST 请求
使用 post
方法发送 POST 请求:
void postData() async {
try {
final response = await networkPlus.post(
Uri.parse('https://jsonplaceholder.typicode.com/posts'),
body: {'title': 'foo', 'body': 'bar', 'userId': '1'},
);
if (response.statusCode == 201) {
print('Response data: ${response.body}');
} else {
print('Request failed with status: ${response.statusCode}');
}
} catch (e) {
print('Error: $e');
}
}
6. 设置超时和重试
network_plus
允许你设置请求超时和自动重试:
final networkPlus = NetworkPlus(
timeout: Duration(seconds: 10),
retryPolicy: RetryPolicy(maxRetries: 3),
);
7. 使用拦截器
你可以添加拦截器来处理请求和响应:
networkPlus.addInterceptor((request) {
print('Request: ${request.url}');
return request;
});
networkPlus.addResponseInterceptor((response) {
print('Response: ${response.statusCode}');
return response;
});
8. 使用缓存
network_plus
还支持缓存功能。你可以启用缓存来存储响应数据:
final networkPlus = NetworkPlus(
cachePolicy: CachePolicy(
maxAge: Duration(hours: 1),
),
);
9. 处理错误
你可以使用 try-catch
块来捕获和处理网络请求中的错误:
void fetchData() async {
try {
final response = await networkPlus.get(Uri.parse('https://jsonplaceholder.typicode.com/posts'));
if (response.statusCode == 200) {
print('Response data: ${response.body}');
} else {
print('Request failed with status: ${response.statusCode}');
}
} catch (e) {
print('Error: $e');
}
}