Flutter网络请求插件request的使用
Flutter网络请求插件request的使用
request
是对 http
包的 get
和 post
方法的一个最小抽象,当返回任何非200状态码时会自动抛出异常。
使用
首先,我们需要引入 request
包:
import 'package:request/request.dart' as http;
与 http
类似,request
暴露了 [get]
和 [post]
方法,这些方法直接包装了 http
的等效方法,并且在任何状态码不是 200
时抛出一个 [HttpStatusException]
异常。
GET 请求
final response = await http.get(uri);
POST 请求
final response = await http.post(uri);
此外,request
还暴露了 [request]
方法,该方法包装了 [get]
并将响应体作为 [String]
返回。与 [get]
和 [post]
类似,如果任何状态码不是 200
,则会抛出异常。
final body = await http.request(uri);
Uri 扩展方法
[get]
, [post]
, 和 [request]
也可以作为 Dart 的 [Uri]
对象的扩展方法使用。
final url = Uri.parse('https://pub.dev/packages/request');
final body = await url.request();
HttpStatusException
抛出的 [HttpStatusException]
包含原始的 [response]
,并且有用于请求的 [url]
, [statusCode]
和 [message]
的 getter。
[message]
默认为 [response.reasonPhrase]
,如果为 null
,则回退到由 W3C 定义的标准状态码短语。
完整示例 Demo
以下是一个完整的示例,展示了如何使用 request
包进行网络请求:
import 'dart:io';
import 'package:flutter/material.dart';
import 'package:request/request.dart' as http;
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(title: Text("Request Demo")),
body: Center(
child: ElevatedButton(
onPressed: () async {
try {
final uri = Uri.parse('https://jsonplaceholder.typicode.com/posts');
final response = await http.get(uri);
print('GET Response Status Code: ${response.statusCode}');
print('GET Response Body: ${response.body}');
} catch (e) {
print('Error: $e');
}
},
child: Text("Perform GET Request"),
),
),
),
);
}
}
更多关于Flutter网络请求插件request的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter网络请求插件request的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
在 Flutter 中,http
是最常用的网络请求插件之一,而不是 request
。http
插件提供了简单易用的 API 来进行 HTTP 请求。下面是如何使用 http
插件进行网络请求的基本步骤。
1. 添加依赖
首先,在 pubspec.yaml
文件中添加 http
插件的依赖:
dependencies:
flutter:
sdk: flutter
http: ^0.13.3
然后运行 flutter pub get
来安装依赖。
2. 导入包
在你的 Dart 文件中导入 http
包:
import 'package:http/http.dart' as http;
3. 发起 GET 请求
下面是一个简单的 GET 请求示例:
void fetchData() async {
var url = Uri.parse('https://jsonplaceholder.typicode.com/posts/1');
var response = await http.get(url);
if (response.statusCode == 200) {
print('Response data: ${response.body}');
} else {
print('Request failed with status: ${response.statusCode}.');
}
}
4. 发起 POST 请求
下面是一个简单的 POST 请求示例:
void postData() async {
var url = Uri.parse('https://jsonplaceholder.typicode.com/posts');
var response = await http.post(url, body: {
'title': 'foo',
'body': 'bar',
'userId': '1',
});
if (response.statusCode == 201) {
print('Response data: ${response.body}');
} else {
print('Request failed with status: ${response.statusCode}.');
}
}
5. 处理 JSON 数据
通常,服务器返回的数据是 JSON 格式的。你可以使用 dart:convert
包来解析 JSON 数据:
import 'dart:convert';
void fetchJsonData() async {
var url = Uri.parse('https://jsonplaceholder.typicode.com/posts/1');
var response = await http.get(url);
if (response.statusCode == 200) {
Map<String, dynamic> data = jsonDecode(response.body);
print('Title: ${data['title']}');
} else {
print('Request failed with status: ${response.statusCode}.');
}
}
6. 处理异常
在实际应用中,网络请求可能会失败,因此建议添加异常处理:
void fetchDataWithErrorHandling() async {
try {
var url = Uri.parse('https://jsonplaceholder.typicode.com/posts/1');
var response = await http.get(url);
if (response.statusCode == 200) {
print('Response data: ${response.body}');
} else {
print('Request failed with status: ${response.statusCode}.');
}
} catch (e) {
print('Request failed with error: $e');
}
}