Flutter功能扩展插件ccci_utility的使用
Flutter功能扩展插件ccci_utility的使用
本文档提供了CCCI Utils的概述,包括自定义小部件、实用类和网络处理。
目录
实用类
BaseApi
BaseApi
类是一个用于使用Dio HTTP客户端进行API调用的基础类。它简化了与RESTful API交互的过程,通过Dio库处理常见的任务,如构建路由、发送请求和错误处理。
使用
该类可以通过传递一个路由和一个 DioClient
实例来构建特定的API服务。每个方法都支持可选参数来自定义请求,例如查询参数或请求路径。
示例
final userApi = BaseApi('/users', dioClient);
final user = await userApi.getById('123');
关键概念
- Dio:一个强大的Dart HTTP客户端,允许轻松地发起HTTP请求。
- 错误处理:API请求中的错误使用
AppLogger
进行记录,并重新抛出以便在应用层进行进一步处理。 - 自定义:每个方法都允许通过可选的查询参数或路径进行定制,使其适用于各种API请求。
参数
String route
:API服务的基本路由(或端点)。这是所有HTTP请求的起点。DioClient dioClient
:用于执行网络请求的Dio HTTP客户端实例。
构造函数
BaseApi(this.route, this.dioClient)
:- 接受一个
route
和一个dioClient
用于向API发起请求。
- 接受一个
方法
getById
:发送GET
请求以获取具有唯一ID的资源。get
:发送GET
请求以获取资源,可选地带有查询参数或特定路径。post
:发送POST
请求以创建具有有效负载的新资源。put
:发送PUT
请求以更新具有唯一ID的现有资源。delete
:发送DELETE
请求以删除具有唯一ID的资源。
基础类扩展示例
class UserApi extends BaseApi {
UserApi(DioClient dioClient) : super('/users', dioClient);
Future fetchUsers() => get();
}
在这个例子中,UserApi
类扩展了 BaseApi
并使用 get
方法从 /users
端点获取用户列表。
BaseRepository
BaseRepository
是一个通用的存储库类,用于从API检索和管理数据。
使用
该类是抽象的,应由具体的存储库为单独的数据实体进行扩展。每个存储库应该定义 fromJson
方法,负责将JSON响应转换为模型对象。
示例
class UserRepository extends BaseRepository<User> {
UserRepository(BaseApi api) : super(api, (json) => User.fromJson(json));
}
关键概念
- BaseApi:用于执行HTTP请求的服务。此类使用
BaseApi
进行所有API交互,如GET、POST、PUT和DELETE请求。 - 模型转换:
fromJson
函数需要将API返回的JSON数据转换为模型对象类型[T]
。 - 错误处理:错误被捕获并使用
AppLogger
记录,原始错误被重新抛出以便进行更高级别的处理。
参数
BaseApi api
:用于执行HTTP请求的API服务。T Function(Map<String, dynamic>) fromJson
:一个函数,将JSON映射转换为模型类[T]
的实例。
构造函数
BaseRepository(this.api, this.fromJson)
:- 接受一个
[api]
实例和一个[fromJson]
函数来初始化存储库。
- 接受一个
方法
get
:使用可选查询参数从API检索实体列表。getById
:使用可选查询参数检索具有唯一标识符的单个实体。
基础类扩展示例
class ProductRepository extends BaseRepository<Product> {
ProductRepository(BaseApi api) : super(api, (json) => Product.fromJson(json));
Future<List<Product>> fetchProducts({Map<String, dynamic>? filters}) {
return get(queryParameters: filters);
}
Future<Product> fetchProductById(String id) {
return getById(id);
}
}
在这个例子中,ProductRepository
扩展了 BaseRepository
来处理产品相关的API调用,例如获取产品列表或通过ID获取单个产品。
BaseServiceProvider
BaseServiceProvider
是一个抽象基类,用于使用Riverpod创建服务提供者。
使用
要创建服务提供者,可以扩展这个 BaseServiceProvider
类并在自定义提供者类中实现特定业务逻辑。
示例
class AuthServiceProvider extends BaseServiceProvider {
AuthServiceProvider(ProviderRef ref) : super(ref);
void signIn(String email, String password) {
// 逻辑处理用户登录,使用 ref 与提供者进行交互。
}
}
这允许你集中处理特定功能的逻辑,如认证、网络或数据存储,并通过Riverpod在整个应用程序中共享这些功能。
关键概念
- ProviderRef:一个用于与其它提供者交互或在Riverpod中管理状态的句柄。
ProviderRef
对象对于访问其他提供者和与全局提供者系统交互至关重要。 - 可扩展性:
BaseServiceProvider
可以扩展以创建专用的服务提供者。每个派生类都将继承对ref
字段的访问权限,允许依赖注入或与其他提供者交互。 - Riverpod:此部分属于使用Riverpod进行状态管理的项目,Riverpod提供了一种声明式的方式来管理依赖关系和应用程序状态。
参数
ProviderRef ref
:此服务提供者将使用的Riverpod提供者的引用。
属性
ref
:一个类型为ProviderRef
的私有字段,提供了对Riverpod框架内其他提供者的访问。
构造函数
BaseServiceProvider(ProviderRef ref)
:- 接受一个
ProviderRef
作为参数,并将其分配给私有字段ref
供派生服务提供者未来使用。
- 接受一个
基础类扩展示例
class NetworkServiceProvider extends BaseServiceProvider {
NetworkServiceProvider(ProviderRef ref) : super(ref);
Future<void> fetchData() async {
// 使用 ref 访问其他提供者或状态管理。
// 示例:final apiService = ref.read(apiServiceProvider);
}
}
在这个例子中,NetworkServiceProvider
继承了 BaseServiceProvider
并使用 ref
与 apiServiceProvider
等其他提供者进行交互。
AppLogger
AppLogger
类是一个用于在应用程序中不同严重级别上记录消息的实用类。它提供了用于记录调试、信息、警告、错误和详细消息的静态方法。此外,它还包括用于记录API请求、响应和错误的方法。
使用
AppLogger.debug('Debug message');
AppLogger.error('Error message');
AppLogger.logApiRequest(url: 'https://api.example.com', method: 'GET');
RouteHandler
RouteHandler
类是一个用于处理应用程序内部导航操作的实用类。它提供了用于在导航器堆栈中推送、弹出和替换路由的方法。这些方法有助于在应用程序的不同屏幕和组件之间进行无缝导航。
示例
RouteHandler.push(context, HomePage());
RouteHandler.pop(context);
DioExceptions
DioExceptions
类是一个自定义异常类,用于处理Dio请求中的错误。它基于不同的Dio异常类型提供自定义错误消息,包括连接超时、接收超时、不良响应和未知错误。
使用
try {
// Dio请求
} catch (e) {
if (e is DioException) {
final dioException = DioExceptions.fromDioError(e);
print(dioException.message);
}
}
DioClient
DioClient
类封装了使用Dio包进行HTTP请求的功能。它包括带有可配置选项和拦截器的GET、POST、PUT和DELETE请求的方法。该类提供了一种方便高效的方式与API交互并处理应用程序内的网络请求。
Dart依赖项
要使用 DioClient
,你需要在 pubspec.yaml
中包含以下Dart包:
dependencies:
dio
flutter_dotenv
配置文件
确保你有必要的配置文件:
.env
使用
BASE_URL=<your_base_url>
config.json
使用
{
"development": {
"current": true,
"baseUrl": "https://dev.example.com"
},
"production": {
"current": false,
"baseUrl": "https://api.example.com"
}
}
更多关于Flutter功能扩展插件ccci_utility的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html