📅  最后修改于: 2023-12-03 15:30:49.663000             🧑  作者: Mango
在Flutter中,要访问REST API,通常需要使用http库。该库提供了一个简单的API,用于发送HTTP请求和处理响应。
要发送GET请求,我们可以使用http库中的get方法,并指定API的URL。下面是一个简单的示例程序:
import 'package:http/http.dart' as http;
Future<void> getData() async {
final url = 'https://jsonplaceholder.typicode.com/todos';
final response = await http.get(Uri.parse(url));
if (response.statusCode == 200) {
print(response.body);
} else {
print('Request failed with status: ${response.statusCode}.');
}
}
注意,上面的代码片段使用了async和await关键字,这样可以使我们以异步方式发送请求并等待响应。如果响应的状态码为200,则我们将收到包含响应体的字符串。
要发送POST请求,我们可以使用http库中的post方法,并指定API的URL和要发送的数据。下面是一个简单的示例程序:
import 'package:http/http.dart' as http;
Future<void> postData() async {
final url = 'https://jsonplaceholder.typicode.com/posts';
final response = await http.post(
Uri.parse(url),
body: {'title': 'foo', 'body': 'bar', 'userId': '1'},
);
if (response.statusCode == 201) {
print(response.body);
} else {
print('Request failed with status: ${response.statusCode}.');
}
}
注意,上面的代码片段使用了body参数,这样我们就可以指定要发送的数据。
有时,我们需要设置自定义的请求头,以便向API发送特定的信息。例如,我们可以设置Authorization头,以便向受保护的API发送令牌。
要设置请求头,我们可以使用http库中的Headers类。下面是一个示例程序:
import 'package:http/http.dart' as http;
Future<void> getDataWithHeaders() async {
final url = 'https://jsonplaceholder.typicode.com/todos';
final headers = {'Authorization': 'Bearer my-token'};
final response = await http.get(Uri.parse(url), headers: headers);
if (response.statusCode == 200) {
print(response.body);
} else {
print('Request failed with status: ${response.statusCode}.');
}
}
在上面的代码片段中,我们向请求头中添加了一个名为Authorization的字段,并将其设置为标头值。接下来,我们将这个头部传递给http.get方法。
在REST API中,通常会返回JSON格式的响应。要解析JSON响应,我们可以使用Dart内置的json库。该库提供了将JSON字符串解析为Dart对象的方法。
下面是一个将JSON响应解析为列表的示例程序:
import 'dart:convert';
import 'package:http/http.dart' as http;
class Todo {
Todo({
required this.userId,
required this.id,
required this.title,
required this.completed,
});
final int userId;
final int id;
final String title;
final bool completed;
factory Todo.fromJson(Map<String, dynamic> json) => Todo(
userId: json['userId'],
id: json['id'],
title: json['title'],
completed: json['completed'],
);
}
Future<void> getTodos() async {
final url = 'https://jsonplaceholder.typicode.com/todos';
final response = await http.get(Uri.parse(url));
if (response.statusCode == 200) {
final data = jsonDecode(response.body) as List<dynamic>;
final todos = data.map((e) => Todo.fromJson(e)).toList();
print(todos);
} else {
print('Request failed with status: ${response.statusCode}.');
}
}
在上面的代码片段中,我们首先将JSON字符串解码为一个动态列表。接下来,我们将数据映射到Todo对象,并将其放入Todo对象列表中。
在Flutter中,我们可以使用http库来访问REST API。我们可以使用http.get或http.post方法发送GET或POST请求,并使用http的头部参数来添加自定义头部数据。我们可以将响应解析为JSON格式,并将其映射到Dart对象。
以上就是Flutter中访问REST API的介绍,希望可以对你有所帮助。