Flutter网络管理插件network_manager的使用
Flutter网络管理插件network_manager的使用
网络管理器简介
network_manager
是一个基于 dio
的网络管理包,用于轻松管理 REST API。
开始使用
network_manager
包含一些功能,用于简化 POST 和 GET API 的使用。
初始化网络管理器
建议在应用的某个入口点初始化网络管理器。你可以设置基础 URL、超时时间,并定义在每次请求时调用的预设函数:onStartDefault
、onEndDefault
、onSuccessDefault
和 onFailedDefault
。
initializeNetworkManager({String token, @required String baseURL}) {
NetworkOption.initialize(
baseUrl: baseURL,
timeout: 30000,
token: token,
headers: {
'Content-Type': 'application/json',
"Authorization": "Bearer $token",
},
onStartDefault: (req) {
print("Start"); // 请求开始时打印
},
onEndDefault: (req) {
print("End"); // 请求结束时打印
},
onSuccessDefault: (res) {
print("Success"); // 请求成功时打印
},
onFailedDefault: (NetworkResponse res) {
print("Failed"); // 请求失败时打印
},
errorMsgExtractor: (res) {
return res["Message"] ?? "Unknown Error"; // 错误消息提取器
},
successMsgExtractor: (res) {
return res["Message"] ?? "Done"; // 成功消息提取器
});
}
每个网络请求返回一个 Future
class NetworkResponse {
final bool responseStatus;
final int responseCode;
final String responseTitle;
Function retryFunction;
dynamic responseBody;
dynamic responseDetails;
String extractedMessage;
NetworkResponse(
{this.responseStatus,
this.responseCode,
this.responseTitle,
this.responseBody,
this.retryFunction,
this.responseDetails,
this.extractedMessage});
@override
String toString() {
return "$responseCode $responseTitle : $extractedMessage"; // 覆盖 toString 方法
}
}
responseBody
是 base dio response.data
的 JSON 解码结果。
示例
在你想要发起请求的地方,可以按如下方式操作:
final Map<String,dynamic> req = {
"Username": "test",
"Password": "test",
};
NetworkManager networkManager = NetworkManager.instance(
context: context,
onSuccess: (context,response) => print("OnSuccessCalled"), // 请求成功回调
req: req,
api: Apis.login
);
networkManager.requestPost(); // 发起 POST 请求
使用方法2
建议在应用的某个入口点初始化网络管理器。你可以设置基础 URL、超时时间,并定义在每次请求时调用的预设函数:onStartDefault
、onEndDefault
、onSuccessDefault
和 onFailedDefault
。
initializeNetworkManager() {
/// 初始化网络管理器
NetworkManagerMetaData.initialize(
baseUrl: "http://example.com",
timeout: 30000,
token: token,
headers: {
'Content-Type': "application/json",
},
onStartDefault: () {
print("Start"); // 请求开始时打印
},
onEndDefault: () {
print("End"); // 请求结束时打印
},
onSuccessDefault: () {
print("Success"); // 请求成功时打印
},
onFailedDefault: () {
print("Failed"); // 请求失败时打印
},
successRules: (result) {
return (result["Status"] ?? -1) > 0; // 成功规则
},
tokenExpireRules: (resultJson) {
return (resultJson["Status"] == -999); // 令牌过期规则
},
onTokenExpire: (retryFunction) {
print("Failed");
// 可以调用重试函数
},
useFancyDialog: true,
errorMsgExtractor: (result) {
return result["Message"] ?? "Unknown Error"; // 错误消息提取器
});
}
示例
在你想要发起请求的地方,可以按如下方式操作:
final Map<String,dynamic> req = {
"Username": "test",
"Password": "test",
};
NetworkManager networkManager = NetworkManager.instance(
context: context,
onSuccess: (context,response) => print("OnSuccessCalled"), // 请求成功回调
req: req,
api: Apis.login
);
networkManager.requestPost(); // 发起 POST 请求
更多关于Flutter网络管理插件network_manager的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter网络管理插件network_manager的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是一个关于如何在Flutter项目中使用network_manager
插件的示例代码。请注意,network_manager
插件的具体API和功能可能会随着版本的更新而有所变化,因此请参考最新的官方文档以确保准确性。
首先,确保你已经在pubspec.yaml
文件中添加了network_manager
依赖:
dependencies:
flutter:
sdk: flutter
network_manager: ^最新版本号 # 替换为实际最新版本号
然后,运行flutter pub get
来安装依赖。
接下来,你可以在Flutter项目中使用NetworkManager
来管理网络连接状态。以下是一个简单的示例,展示了如何使用NetworkManager
来监听网络连接变化:
import 'package:flutter/material.dart';
import 'package:network_manager/network_manager.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatefulWidget {
@override
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
NetworkStatus? _networkStatus;
@override
void initState() {
super.initState();
// 初始化NetworkManager并监听网络连接变化
NetworkManager.init().then((_) {
NetworkManager.addListener(_onNetworkStatusChanged);
// 获取当前的网络状态
_networkStatus = NetworkManager.instance.status;
setState(() {});
});
}
@override
void dispose() {
// 移除监听器
NetworkManager.removeListener(_onNetworkStatusChanged);
super.dispose();
}
void _onNetworkStatusChanged(NetworkStatus status) {
setState(() {
_networkStatus = status;
});
}
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('NetworkManager Demo'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text(
'Network Status:',
style: TextStyle(fontSize: 20),
),
SizedBox(height: 10),
Text(
_networkStatus != null
? _networkStatus!.toString()
: 'Loading...',
style: TextStyle(fontSize: 18),
),
],
),
),
),
);
}
}
在这个示例中,我们做了以下几件事:
- 在
initState
方法中,我们初始化了NetworkManager
并添加了一个监听器_onNetworkStatusChanged
,该监听器会在网络连接状态发生变化时被调用。 - 在
dispose
方法中,我们移除了监听器,以避免内存泄漏。 _onNetworkStatusChanged
方法会在网络连接状态变化时更新UI。- 在
build
方法中,我们显示当前的网络连接状态。
请注意,这个示例仅展示了基本的网络连接状态监听功能。network_manager
插件可能还提供了其他功能,如检查特定域名的可达性等,你可以参考官方文档来获取更多信息。