Flutter网络请求简化插件rest_simplified的使用
Flutter网络请求简化插件rest_simplified的使用
Rest Simplified 是一个帮助访问 RESTful 后端的简单库。当前版本处于实验阶段,不建议在生产环境中使用。
示例
以下是一个用于测试的示例:
RestSimplified rs = RestSimplified.build('https://catfact.ninja');
rs.addFromJsonMapParser<CatFact>(CatFactJsonMapper());
rs.addPath<CatFact>(Method.get, '/fact');
ServiceResult result = await rs.getRestAccessor().get<CatFact>();
expect(result.httpCode, 200);
CatFact catFact = result.entity;
expect(catFact.fact!.length, catFact.length);
print(catFact.fact);
简单的REST GET示例
void getExampleCall() async {
// 初始化 RestSimplified 实例并设置基础URL
RestSimplified rs = RestSimplified.build('https://catfact.ninja');
// 添加从JSON映射解析器
rs.addFromJsonMapParser<CatFact>(CatFactJsonMapper());
// 添加路径和HTTP方法
rs.addPath<CatFact>(Method.get, '/fact');
// 发起GET请求并获取结果
ServiceResult result = await rs.getRestAccessor().get<CatFact>();
// 解析返回的对象
CatFact catFact = result.entity;
print(catFact.fact); // 打印事实内容
print(catFact.length); // 打印事实长度
}
// 定义 CatFact 类
class CatFact {
String? fact;
int? length;
}
// 定义 CatFactJsonMapper 类实现 FromJsonParser 接口
class CatFactJsonMapper implements FromJsonParser {
[@override](/user/override)
List toList(json) {
// 不处理列表
throw UnimplementedError();
}
[@override](/user/override)
toObject(Map<String, dynamic> json) {
CatFact fact = CatFact();
fact.fact = json['fact']; // 设置事实内容
fact.length = json['length']; // 设置事实长度
return fact;
}
}
使用POST请求进行登录然后GET请求以显示一些信息
// 定义 JSONContentHeader 类实现 HeaderBuilder 接口
class JSONContentHeader implements HeaderBuilder {
[@override](/user/override)
Map<String, String> get() {
Map<String, String> header = {};
header['Content-Type'] = 'application/json'; // 根据服务器需求添加 Content-Type 头
return header;
}
}
// 定义 RestFactory 类
class RestFactory {
static final RestSimplified rest = RestSimplified.build(
'http://localhost:3000',
defaultHeaderBuilder: JSONContentHeader());
// 初始化方法,在 main.dart 中调用
static void init() {
rest.addFromJsonMapParser<UserDTO>(UserJsonToUser());
rest.addToJsonMapParser<SigninDTO>(SigninToJson());
// 添加路径和HTTP方法
rest.addPath<SigninDTO>(Method.post, '/users/signin');
rest.addPath<UserDTO>(Method.get, '/users/whoami/');
}
}
// 定义 SigninDTO 类
class SigninDTO {
String email;
String password;
SigninDTO(this.email, this.password);
}
// 定义 UserDTO 类
class UserDTO {
String? email;
String? recoveryEmail;
String? publicKey;
}
// 定义 SigninToJson 类实现 ToJsonMapParser 接口
class SigninToJson extends ToJsonMapParser<SigninDTO> {
[@override](/user/override)
Map<String, String> toMap(SigninDTO dto) {
Map<String, String> map = {};
map['email'] = dto.email;
map['password'] = dto.password;
return map;
}
}
// 定义 UserJsonToUser 类实现 FromJsonParser 接口
class UserJsonToUser extends FromJsonParser<UserDTO> {
[@override](/user/override)
UserDTO toObject(Map<String, dynamic> json) {
UserDTO user = UserDTO();
user.email = json['email'];
user.recoveryEmail = json['recoveryEmail'];
user.publicKey = json['publicKey'];
return user;
}
}
// 在登录小部件中调用登录方法
void _call(Map<String, dynamic> form) {
SigninDTO signin = SigninDTO(form['email'], form['password']);
Future<ServiceResult> result = RestFactory.rest
.getRestAccessor()
.post<SigninDTO, UserDTO>(signin, headerBuilder: JSONHeader());
result.then((value) => _handleResponse(value.entity, value.headers));
}
void _handleResponse(UserDTO entity, Map<String, String> headers) {
// 进行额外的检查
SimpleRouter.forwardAndRemoveAll(const WhoAmIPage()); // 示例使用 SimpleRouter
}
// 在显示用户信息的小部件中
[@override](/user/override)
void initState() {
// 发起GET请求获取用户信息
Future<ServiceResult> whoami =
RestFactory.rest.getRestAccessor().get<UserDTO>();
whoami.then((value) => _handleResult(value.entity));
super.initState();
}
void _handleResult(UserDTO user) {
// 更新屏幕上的字段值
setState(() {
_email = user.email ?? '';
_recoveryEmail = user.recoveryEmail ?? '';
_publicKey = user.publicKey ?? '';
_loading = false;
});
}
更多关于Flutter网络请求简化插件rest_simplified的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter网络请求简化插件rest_simplified的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
rest_simplified
是一个用于简化 Flutter 网络请求的插件。它旨在让开发者能够更轻松地进行 HTTP 请求,而无需处理复杂的配置和回调。以下是如何使用 rest_simplified
进行网络请求的基本步骤。
1. 添加依赖
首先,在 pubspec.yaml
文件中添加 rest_simplified
依赖:
dependencies:
flutter:
sdk: flutter
rest_simplified: ^1.0.0 # 请使用最新版本
然后运行 flutter pub get
来安装依赖。
2. 导入包
在需要使用 rest_simplified
的 Dart 文件中导入包:
import 'package:rest_simplified/rest_simplified.dart';
3. 发起 GET 请求
使用 RestSimplified
发起一个简单的 GET 请求:
void fetchData() async {
try {
var response = await RestSimplified.get('https://jsonplaceholder.typicode.com/posts');
print('Response data: ${response.body}');
} catch (e) {
print('Error: $e');
}
}
4. 发起 POST 请求
使用 RestSimplified
发起一个 POST 请求:
void postData() async {
var data = {
'title': 'foo',
'body': 'bar',
'userId': 1,
};
try {
var response = await RestSimplified.post(
'https://jsonplaceholder.typicode.com/posts',
body: data,
);
print('Response data: ${response.body}');
} catch (e) {
print('Error: $e');
}
}
5. 发起 PUT 请求
使用 RestSimplified
发起一个 PUT 请求:
void updateData() async {
var data = {
'id': 1,
'title': 'foo',
'body': 'bar',
'userId': 1,
};
try {
var response = await RestSimplified.put(
'https://jsonplaceholder.typicode.com/posts/1',
body: data,
);
print('Response data: ${response.body}');
} catch (e) {
print('Error: $e');
}
}
6. 发起 DELETE 请求
使用 RestSimplified
发起一个 DELETE 请求:
void deleteData() async {
try {
var response = await RestSimplified.delete('https://jsonplaceholder.typicode.com/posts/1');
print('Response status: ${response.statusCode}');
} catch (e) {
print('Error: $e');
}
}
7. 处理响应
RestSimplified
返回的响应对象包含以下属性:
statusCode
: 响应的状态码。body
: 响应的主体内容(通常是 JSON 字符串)。headers
: 响应的头部信息。
你可以根据需要对响应进行处理,例如解析 JSON 数据:
void fetchAndParseData() async {
try {
var response = await RestSimplified.get('https://jsonplaceholder.typicode.com/posts');
var jsonData = jsonDecode(response.body);
print('Parsed data: $jsonData');
} catch (e) {
print('Error: $e');
}
}
8. 设置请求头
你可以在请求时设置自定义的请求头:
void fetchWithHeaders() async {
var headers = {
'Authorization': 'Bearer your_token_here',
};
try {
var response = await RestSimplified.get(
'https://jsonplaceholder.typicode.com/posts',
headers: headers,
);
print('Response data: ${response.body}');
} catch (e) {
print('Error: $e');
}
}
9. 处理错误
RestSimplified
会抛出异常来处理网络请求中的错误。你可以使用 try-catch
来捕获并处理这些错误:
void fetchDataWithErrorHandling() async {
try {
var response = await RestSimplified.get('https://jsonplaceholder.typicode.com/invalid-url');
print('Response data: ${response.body}');
} on RestSimplifiedException catch (e) {
print('Error: ${e.message}');
} catch (e) {
print('Unexpected error: $e');
}
}
10. 配置全局设置(可选)
你可以配置全局的 RestSimplified
设置,例如设置全局的请求头或超时时间:
void configureGlobalSettings() {
RestSimplified.configure(
baseUrl: 'https://jsonplaceholder.typicode.com',
headers: {
'Authorization': 'Bearer your_token_here',
},
timeout: Duration(seconds: 30),
);
}