Flutter网络请求管理插件pq_network的使用
pq_network概述
pq_network是一个基于 Dio
的网络请求管理插件,提供了许多实用功能,如快速设置代理、日志格式化、mock 数据支持以及 JSON 解码等。
pq_network使用示例
配置Dio
在进行任何网络请求之前,需要先配置 Dio
的 BaseOptions
。以下是配置示例:
BaseOptions options = BaseOptions(
connectTimeout: 20000, // 连接超时时间
receiveTimeout: 30000, // 接收数据超时时间
sendTimeout: 30000, // 发送数据超时时间
baseUrl: "https://example.com/api", // 基础URL
headers: {'Content-Type': 'application/json'}); // 默认请求头
PQNetwork.config(options);
请求示例(Mock)
通过 mock
参数可以模拟网络请求,并返回自定义的数据。
_get() async {
final path = "https://example.com/get";
final res = await PQNetwork.get(
path,
mock: true, // 启用mock模式
mockData: {"msg": "OK", "data": {}, "code": 0}, // 自定义返回数据
);
print("xxxxxxxxxx get res $res"); // 输出模拟数据
}
请求示例(Mock + Decoder)
结合 decoder
参数,可以将返回的 JSON 数据自动解析为指定的模型类。
_getAndDecoder() async {
final path = "https://example.com/get";
final res = await PQNetwork.get(
path,
decoder: (data) => MockDataEntity.fromJson(data), // 自动解析为模型类
mock: true,
mockData: {"msg": "OK", "data": {}, "code": 0},
);
print("xxxxxxxxxx get res $res");
}
// 定义模型类
class MockDataEntity {
String? msg;
int? code;
dynamic data;
MockDataEntity({this.data, this.code, this.msg});
MockDataEntity.fromJson(Map<String, dynamic> json) {
msg = json['msg'];
code = json['code'];
data = json['data'];
}
}
其他请求示例
POST 请求
_post() async {
final res = await PQNetwork.post(
"https://example.com/post",
mock: true, // 启用mock模式
mockData: "aaaaaaaaaa"); // 自定义返回数据
print("xxxxxxxxxx post res $res");
}
DELETE 请求
_delete() async {
final res = await PQNetwork.delete(
"https://example.com/delete",
mock: true,
mockData: "aaaaaaaaaa");
print("xxxxxxxxxx delete res $res");
}
PUT 请求
_put() async {
final res = await PQNetwork.put(
"https://example.com/put",
mock: true,
mockData: "aaaaaaaaaa");
print("xxxxxxxxxx put res $res");
}
文件下载
可以通过 PQNetwork.download
方法实现文件下载。
_download() async {
Directory tempDir = await getTemporaryDirectory(); // 获取临时目录
String savePath = tempDir.path + "/111.jpeg"; // 设置保存路径
final res = await PQNetwork.download(
"https://example.com/file.jpg", savePath); // 下载文件
print("xxxxxxxxxxxxxxxx res $savePath");
}
获取二进制数据
通过 PQNetwork.getBytes
方法可以获取图片或其他二进制数据。
_getBytes() async {
final res = await PQNetwork.getBytes(
"https://example.com/image.jpg");
setState(() {
imageBytes = Uint8List.fromList(res.data ?? []); // 更新状态
});
}
完整示例代码
以下是一个完整的示例代码,展示了如何使用 pq_network
插件进行各种网络请求。
import 'dart:io';
import 'dart:typed_data';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:path_provider/path_provider.dart';
import 'package:pq_network/pq_network.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: MyHomePage(),
);
}
}
class MyHomePage extends StatefulWidget {
[@override](/user/override)
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
Uint8List imageBytes = Uint8List(0);
[@override](/user/override)
void initState() {
super.initState();
BaseOptions options = BaseOptions(
connectTimeout: 20000,
receiveTimeout: 30000,
sendTimeout: 30000,
headers: {'Content-Type': 'application/json'});
PQNetwork.config(options);
}
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text('PQ Network Example')),
body: Column(
children: [
CupertinoButton(child: Text("GET"), onPressed: _get),
CupertinoButton(child: Text("GET AND DECODER"), onPressed: _getAndDecoder),
CupertinoButton(child: Text("POST"), onPressed: _post),
CupertinoButton(child: Text("DELETE"), onPressed: _delete),
CupertinoButton(child: Text("PUT"), onPressed: _put),
CupertinoButton(child: Text("DOWNLOAD"), onPressed: _download),
CupertinoButton(child: Text("GET_BYTES"), onPressed: _getBytes),
Row(
children: [
Text("BytesImage ${imageBytes.isNotEmpty}"),
if (imageBytes.isNotEmpty)
Image.memory(
imageBytes,
width: 30,
height: 30,
)
],
)
],
),
);
}
_get() async {
final path = "https://example.com/get";
final res = await PQNetwork.get(
path,
mock: true,
mockData: {"msg": "OK", "data": {}, "code": 0},
);
print("xxxxxxxxxx get res $res");
}
_getAndDecoder() async {
final path = "https://example.com/get";
final res = await PQNetwork.get(
path,
decoder: (data) => MockDataEntity.fromJson(data),
mock: true,
mockData: {"msg": "OK", "data": {}, "code": 0},
);
print("xxxxxxxxxx get res $res");
}
_post() async {
final res = await PQNetwork.post(
"https://example.com/post",
mock: true,
mockData: "aaaaaaaaaa");
print("xxxxxxxxxx post res $res");
}
_delete() async {
final res = await PQNetwork.delete(
"https://example.com/delete",
mock: true,
mockData: "aaaaaaaaaa");
print("xxxxxxxxxx delete res $res");
}
_put() async {
final res = await PQNetwork.put(
"https://example.com/put",
mock: true,
mockData: "aaaaaaaaaa");
print("xxxxxxxxxx put res $res");
}
_download() async {
Directory tempDir = await getTemporaryDirectory();
String savePath = tempDir.path + "/111.jpeg";
final res = await PQNetwork.download(
"https://example.com/file.jpg", savePath);
print("xxxxxxxxxxxxxxxx res $savePath");
}
_getBytes() async {
final res = await PQNetwork.getBytes(
"https://example.com/image.jpg");
setState(() {
imageBytes = Uint8List.fromList(res.data ?? []);
});
}
}
class MockDataEntity {
String? msg;
int? code;
dynamic data;
MockDataEntity({this.data, this.code, this.msg});
MockDataEntity.fromJson(Map<String, dynamic> json) {
msg = json['msg'];
code = json['code'];
data = json['data'];
}
}
更多关于Flutter网络请求管理插件pq_network的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter网络请求管理插件pq_network的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
pq_network
是一个用于 Flutter 的网络请求管理插件,它简化了网络请求的处理,并提供了诸如请求拦截、错误处理、缓存管理等功能。以下是如何使用 pq_network
插件的基本步骤:
1. 添加依赖
首先,在 pubspec.yaml
文件中添加 pq_network
依赖:
dependencies:
flutter:
sdk: flutter
pq_network: ^1.0.0 # 请使用最新版本
然后运行 flutter pub get
来安装依赖。
2. 初始化 PQNetwork
在你的 Flutter 应用中初始化 PQNetwork
。通常可以在 main.dart
中进行初始化:
import 'package:flutter/material.dart';
import 'package:pq_network/pq_network.dart';
void main() {
runApp(MyApp());
// 初始化 PQNetwork
PQNetwork.init(
baseUrl: 'https://jsonplaceholder.typicode.com', // 你的 API 基础 URL
interceptors: [
// 添加拦截器
LoggingInterceptor(),
],
);
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: MyHomePage(),
);
}
}
3. 发起网络请求
你可以使用 PQNetwork
来发起 GET、POST、PUT、DELETE 等请求。以下是一个简单的 GET 请求示例:
import 'package:flutter/material.dart';
import 'package:pq_network/pq_network.dart';
class MyHomePage extends StatefulWidget {
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
String _responseData = '';
Future<void> _fetchData() async {
try {
final response = await PQNetwork.get('/posts/1');
setState(() {
_responseData = response.data.toString();
});
} catch (e) {
setState(() {
_responseData = 'Error: $e';
});
}
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('PQ Network Example'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text(_responseData),
SizedBox(height: 20),
ElevatedButton(
onPressed: _fetchData,
child: Text('Fetch Data'),
),
],
),
),
);
}
}
4. 使用拦截器
pq_network
支持拦截器,你可以在请求发送前或响应返回后进行一些处理。例如,添加一个日志拦截器:
class LoggingInterceptor extends Interceptor {
@override
void onRequest(RequestOptions options) {
print('Request: ${options.method} ${options.path}');
super.onRequest(options);
}
@override
void onResponse(Response response) {
print('Response: ${response.statusCode}');
super.onResponse(response);
}
@override
void onError(DioError err) {
print('Error: ${err.message}');
super.onError(err);
}
}
5. 错误处理
pq_network
会自动处理一些常见的网络错误,但你也可以在 catch
块中自定义错误处理逻辑:
try {
final response = await PQNetwork.get('/posts/1');
setState(() {
_responseData = response.data.toString();
});
} catch (e) {
setState(() {
_responseData = 'Error: $e';
});
}