Flutter API模型管理插件flutter_api_model的使用
Flutter API模型管理插件flutter_api_model的使用
特性
高阶网络请求建模,管理输入参数和输出参数,遵循"In-Out"命名规范。APIModel不直接处理网络请求;相反,它擅长于网络层抽象。
开始使用
安装
在你的pubspec.yaml
文件中添加以下依赖:
dependencies:
flutter_api_model: latest_version
导入
将包导入到Dart代码中:
import 'package:flutter_api_model/flutter_api_model.dart';
支持await
和回调格式以增加灵活性
使用await
final model = await UserSearchAPIModel(inUserId: '2024').start();
if (model.hasError) {
error = model.outError;
} else {
user = model.outUser;
}
使用回调
UserSearchAPIModel(inUserId: '2024').onComplete((model) {
if (!model.hasError) {
user = model.outUser;
} else {
error = model.outError;
}
}).start();
类定义
命名规则
- 输入参数前缀:
in
(inUserId, inPassword)
- 输出结果前缀:
out
(outUser)
定义APIModel的三种方式
-
使用mixin 适用于没有特殊初始化需求的场景。
class SomeAPIModel with APIModel<SomeAPIModel>
-
使用继承 适合定义一个扩展
APIModel
的基本网络请求类。class BaseRequestModel extends APIModel<SomeAPIModel>
-
使用mixin和继承的组合(推荐) 最适合自定义网络请求、数据处理和职责分离。例如,
BaseRequest
可以处理Dio操作和数据转换,而APIModel
则提供请求流程和封装。class SomeAPIModel extends BaseRequest with APIModel<SomeAPIModel>
示例:定义UserSearchAPIModel
class UserSearchAPIModel extends BaseRequest<Map>
with APIModel<UserSearchAPIModel>,
OutError<UserSearchAPIModel, FlutterError>,
LoginNeed,
CancelEnable {
UserSearchAPIModel({required this.inUserId});
/// 输入参数
String inUserId;
/// 输出结果
User? outUser;
[@override](/user/override)
load() async {
try {
final response = await dio.request('/user/profile', cancelToken: cancelToken);
outUser = User.converFrom(jsonObject);
} on FlutterError catch (e) {
outError = e;
} catch (e) {
if (CancelToken.isCancel(e) == false) {
// 处理错误
throw e;
}
} finally {
finalize();
}
}
}
/// 如果需要初始化工作,定义基础类型
/// 定义 `BaseRequest` 类
class BaseRequest<DataType> {
final dio = Dio();
final cancelToken = CancelToken();
DataType? data;
int? code;
String? msg;
BaseRequest() {
dio.options.baseUrl = 'https://base_url.com';
dio.options.headers = {'token': 'some_token'};
}
void fillData(Dio.Response response) {
data = getData(response);
code = response.statusCode;
msg = getMsg(response);
}
}
/// 定义一个mixin来覆盖 `hasPermission` 方法,当用户未登录时阻止调用。
/// 定义 `LoginNeed` Mixin.
mixin LoginNeed<T> on APIModel<T> {
[@override](/user/override)
bool hasPermission() {
return isLogin();
}
didBlock() {
print('API 请求被阻塞。');
}
}
/// 使用 `CancelEnable` Mixin 实现可取消的请求
[@optionalTypeArgs](/user/optionalTypeArgs)
mixin CancelEnable<T> on APIModel<T>, BaseRequest {
[@override](/user/override)
bool isCancellable() {
return true;
}
[@override](/user/override)
void cancel() {
super.cancel();
cancelToken.cancel();
}
}
更多关于Flutter API模型管理插件flutter_api_model的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter API模型管理插件flutter_api_model的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
flutter_api_model
是一个用于管理 API 数据模型的 Flutter 插件,它可以帮助开发者快速生成和管理与 API 相关的数据模型类。通过这个插件,开发者可以更轻松地将 JSON 数据转换为 Dart 对象,并在应用中进行使用。
以下是如何使用 flutter_api_model
插件的基本步骤:
1. 安装插件
首先,你需要在 pubspec.yaml
文件中添加 flutter_api_model
插件的依赖:
dependencies:
flutter:
sdk: flutter
flutter_api_model: ^1.0.0 # 请使用最新版本
然后,运行 flutter pub get
来安装依赖。
2. 生成模型类
flutter_api_model
提供了一个命令行工具来生成模型类。你可以通过以下步骤生成模型:
2.1 创建一个 JSON 文件
首先,你需要有一个描述你的 API 数据的 JSON 文件。例如,假设你有一个 user.json
文件,内容如下:
{
"id": 1,
"name": "John Doe",
"email": "john.doe@example.com",
"is_active": true
}
2.2 使用命令行工具生成模型类
在终端中运行以下命令来生成模型类:
flutter pub run flutter_api_model generate -i path/to/user.json -o lib/models/
-i
参数指定输入 JSON 文件的路径。-o
参数指定生成的 Dart 文件的输出目录。
运行命令后,插件会根据 JSON 文件生成相应的 Dart 模型类。例如,它会生成一个 user.dart
文件:
import 'package:flutter_api_model/flutter_api_model.dart';
class User with ApiModel {
int id;
String name;
String email;
bool isActive;
User({
required this.id,
required this.name,
required this.email,
required this.isActive,
});
factory User.fromJson(Map<String, dynamic> json) {
return User(
id: json['id'],
name: json['name'],
email: json['email'],
isActive: json['is_active'],
);
}
@override
Map<String, dynamic> toJson() {
return {
'id': id,
'name': name,
'email': email,
'is_active': isActive,
};
}
}
3. 使用生成的模型类
生成模型类后,你可以在应用中使用它们来解析和序列化 JSON 数据。例如:
import 'package:flutter/material.dart';
import 'models/user.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
// 假设你从 API 获取了以下 JSON 数据
final jsonData = {
"id": 1,
"name": "John Doe",
"email": "john.doe@example.com",
"is_active": true
};
// 将 JSON 数据转换为 User 对象
final user = User.fromJson(jsonData);
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('User Profile'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text('Name: ${user.name}'),
Text('Email: ${user.email}'),
Text('Active: ${user.isActive}'),
],
),
),
),
);
}
}
4. 自定义生成的模型类
flutter_api_model
允许你通过配置文件自定义生成的模型类。你可以在项目根目录下创建一个 flutter_api_model.yaml
文件,并在其中指定自定义选项。例如:
generate:
model_suffix: Model
json_serializable: true