Flutter网络请求增强插件networking_plus的使用
Flutter网络请求增强插件networking_plus的使用
Networking Plus
一个用于轻松调用REST API并摆脱大量样板代码的Flutter库。
特性
- GET 请求
- POST 请求
- PUT 请求
- DELETE 请求
开始使用
要使用此网络工具,只需调用库的静态函数即可,您可以非常方便地调用您的REST API。此库中的错误处理非常简单,它会以字符串的形式为您提供确切的错误信息,因此您可以将其展示在UI上供用户参考。
使用方法
首先,通过以下代码设置库中的基础URL:
Networking.baseURL = "https://example.com/api/v1/"
此外,您还可以设置默认头信息,这些头信息将会附加到每次API调用中。
Networking.defaultHeaders["Content-Type"] = "application/json";
Networking.defaultHeaders["Authorization"] = "Bearer ${UserRepo.getToken()}";
现在可以像下面的例子一样调用库中的任何方法:
var result = await Networking.get("user/data");
结果有两种类型:Success 或 Error。
如果是成功响应,可以从结果中获取数据如下:
if(result is Success) {
var body = result.response;
// 如果响应是一个对象
var desiredObject = MyObject.fromJson(body);
// 如果响应是一个对象列表
var resultList = result.response as List;
var itemList: List<MyObject> = resultList.map((e) => MyObject.fromJson(e)).toList();
}
如果是错误响应,则可以这样处理:
else {
var error = result as Error;
var errorCode = error.code;
var errorMessage = error.message;
}
额外信息
这些功能将很快成为库的一部分:
- 调用超时
- 从未经验证的颁发机构进行SSL证书验证
完整示例代码
以下是一个完整的示例代码,展示了如何使用 networking_plus 插件来处理网络请求。
import 'package:flutter/material.dart';
import 'package:networking_plus/networking_plus.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: NetworkExample(),
);
}
}
class NetworkExample extends StatefulWidget {
@override
_NetworkExampleState createState() => _NetworkExampleState();
}
class _NetworkExampleState extends State<NetworkExample> {
String _result = "";
@override
void initState() {
super.initState();
fetchData();
}
Future<void> fetchData() async {
// 设置基础URL和默认头信息
Networking.baseURL = "https://jsonplaceholder.typicode.com/";
Networking.defaultHeaders["Content-Type"] = "application/json";
try {
// 发起GET请求
var result = await Networking.get("posts/1");
if (result is Success) {
// 处理成功响应
var body = result.response;
setState(() {
_result = "成功: $body";
});
} else if (result is Error) {
// 处理错误响应
setState(() {
_result = "错误: ${result.code} - ${result.message}";
});
}
} catch (e) {
// 捕获异常
setState(() {
_result = "异常: $e";
});
}
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text("networking_plus 示例")),
body: Center(
child: Text(_result),
),
);
}
}
运行效果
运行上述代码后,界面会显示从 https://jsonplaceholder.typicode.com/posts/1 获取的数据。如果请求成功,界面会显示类似以下内容:
成功: {"userId":1,"id":1,"title":"sunt aut facere repellat provident occaecati excepturi optio reprehenderit","body":"quia et suscipit\nsuscipit ...
更多关于Flutter网络请求增强插件networking_plus的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter网络请求增强插件networking_plus的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
networking_plus 是 Flutter 中一个用于增强网络请求的插件,它提供了更多的功能和灵活性来处理 HTTP 请求。以下是如何使用 networking_plus 插件的基本步骤:
1. 添加依赖
首先,在你的 pubspec.yaml 文件中添加 networking_plus 依赖:
dependencies:
flutter:
sdk: flutter
networking_plus: ^1.0.0 # 请使用最新版本
然后运行 flutter pub get 来安装依赖。
2. 导入包
在你的 Dart 文件中导入 networking_plus 包:
import 'package:networking_plus/networking_plus.dart';
3. 发起网络请求
networking_plus 提供了多种方法来发起网络请求,包括 GET、POST、PUT、DELETE 等。
3.1 GET 请求
void fetchData() async {
var response = await Networking.get('https://jsonplaceholder.typicode.com/posts');
if (response.statusCode == 200) {
print('Data: ${response.body}');
} else {
print('Request failed with status: ${response.statusCode}');
}
}
3.2 POST 请求
void postData() async {
var response = await Networking.post(
'https://jsonplaceholder.typicode.com/posts',
body: {
'title': 'foo',
'body': 'bar',
'userId': 1,
},
);
if (response.statusCode == 201) {
print('Data: ${response.body}');
} else {
print('Request failed with status: ${response.statusCode}');
}
}
4. 处理请求头
你可以在请求中添加自定义的请求头:
void fetchDataWithHeaders() async {
var response = await Networking.get(
'https://jsonplaceholder.typicode.com/posts',
headers: {
'Authorization': 'Bearer your_token_here',
},
);
if (response.statusCode == 200) {
print('Data: ${response.body}');
} else {
print('Request failed with status: ${response.statusCode}');
}
}
5. 处理错误
networking_plus 提供了错误处理机制,你可以通过 try-catch 来捕获异常:
void fetchDataWithErrorHandling() async {
try {
var response = await Networking.get('https://jsonplaceholder.typicode.com/invalid');
if (response.statusCode == 200) {
print('Data: ${response.body}');
} else {
print('Request failed with status: ${response.statusCode}');
}
} catch (e) {
print('Error: $e');
}
}
6. 处理响应
你可以通过 response.body 来获取响应的主体内容,或者通过 response.json() 来将响应内容解析为 JSON 对象:
void fetchAndParseJson() async {
var response = await Networking.get('https://jsonplaceholder.typicode.com/posts');
if (response.statusCode == 200) {
var jsonData = response.json();
print('First post title: ${jsonData[0]['title']}');
} else {
print('Request failed with status: ${response.statusCode}');
}
}
7. 其他功能
networking_plus 还提供了其他功能,如文件上传、下载、请求超时设置等。你可以参考官方文档来了解更多高级用法。
8. 示例代码
以下是一个完整的示例代码,展示了如何使用 networking_plus 发起一个 GET 请求并处理响应:
import 'package:flutter/material.dart';
import 'package:networking_plus/networking_plus.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('Networking Plus Example'),
),
body: Center(
child: ElevatedButton(
onPressed: fetchData,
child: Text('Fetch Data'),
),
),
),
);
}
void fetchData() async {
try {
var response = await Networking.get('https://jsonplaceholder.typicode.com/posts');
if (response.statusCode == 200) {
var jsonData = response.json();
print('First post title: ${jsonData[0]['title']}');
} else {
print('Request failed with status: ${response.statusCode}');
}
} catch (e) {
print('Error: $e');
}
}
}

