Flutter核心功能扩展插件onix_flutter_core的使用
Flutter核心功能扩展插件onix_flutter_core的使用
目录
网络功能
onix_flutter_core
包含了一些基础类,旨在提升使用HTTP网络功能的体验。以下是该包的主要功能:
- 基于Dio的自定义API客户端
- 自定义错误处理技术
创建自定义API客户端
首先,我们需要创建一个自定义的API客户端。这个客户端基于Dio库,并且可以配置一些参数,例如基础URL、超时时间、拦截器等。
// 创建Dio客户端模块
final dioClientModule = _DioClientModule();
// 创建API客户端
final apiClient = dioClientModule.makeApiClient(
ApiClientParams(
baseUrl: 'https://jsonplaceholder.typicode.com/',
defaultConnectTimeout: 5000, // 连接超时时间
defaultReceiveTimeout: 5000, // 接收超时时间
interceptors: [LogInterceptor()], // 添加日志拦截器
),
);
创建请求处理器
接下来,我们创建一个请求处理器,用于处理HTTP请求。
// 创建请求处理器
final processor = dioClientModule.makeDioRequestProcessor();
发起请求
我们可以使用processor
来发起HTTP请求。这里提供了一个示例,展示了如何处理自定义错误。
processor.get('/posts/1').then((response) {
if (response.isSuccess()) {
final data = response.data;
// 处理成功响应
} else {
// 处理错误
onCustomError(response);
}
}).catchError((error) {
// 捕获异常
});
// 自定义错误处理函数
void onCustomError(response) {
final responseType = response?.requestOptions.responseType;
if (responseType == ResponseType.json) {
return MyResponse.fromJson(response.data); // 解析JSON响应
}
return MyError.unknownError(); // 返回未知错误
}
处理响应或错误
DataResponse
类用于封装HTTP请求的响应。我们可以根据isSuccess()
方法判断请求是否成功,并相应地处理数据或错误。
if (response.isSuccess()) {
final data = response.data;
// 处理成功响应
} else {
// 处理错误
}
完整示例Demo
以下是一个完整的Flutter应用示例,展示了如何使用onix_flutter_core
中的网络功能。
import 'package:example/base_api_client_example/base_api_client_example.dart';
import 'package:example/di.dart';
import 'package:flutter/material.dart';
import 'package:get_it/get_it.dart';
void main() {
WidgetsFlutterBinding.ensureInitialized();
// 初始化依赖注入
initializeDi(GetIt.I);
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
theme: ThemeData(
colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
useMaterial3: true,
),
initialRoute: '/',
routes: {
'/': (context) => const MyHomePage(),
'/base_api_client_example': (context) =>
const BaseApiClientExample(title: 'Base API Client Example'),
},
);
}
}
class MyHomePage extends StatelessWidget {
const MyHomePage({super.key});
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
backgroundColor: Theme.of(context).colorScheme.inversePrimary,
title: const Text('Onix Flutter Core Examples'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
ElevatedButton(
onPressed: () =>
Navigator.pushNamed(context, '/base_api_client_example'),
child: const Text('Base API Client'),
),
],
),
),
);
}
}
更多关于Flutter核心功能扩展插件onix_flutter_core的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
1 回复