Flutter控制器管理插件get_controller_plus的使用
Flutter控制器管理插件get_controller_plus的使用
标题
get_controller_plus #
功能介绍
- 支持运行过程中的通知,包括持续时间。
- 提供方便的错误处理宏函数。
- 进一步鼓励视图和逻辑分离。
- 提供支持的控件。
开始使用
先决条件
GetX
库- 熟悉
GetxController
类的使用 - 知道如何连接 Get Observables
使用方法
实现方式与 GetxController
相同。
import 'package:get_controller_plus/get_controller_plus.dart';
class MySmartController extends GetxControllerPlus {
}
能力
加载感知
引入了 LoadAware
能力,GetxControllerPlus
提供了扩展方法:
isLoading
getter 和 setter,以及带有tag
变体的isLoadingByTag
和setIsLoadingByTag
。
// 在 GetxControllerPlus 范围内
isLoading = true;
isLoading = false;
setIsLoadingByTag(true, "anotherProcess",);
// 在视图中
Obx(
() => {
final isLoading = controller.isLoading;
// 或
// final isLoading = controller.isLoadingByTag("anotherProcess",);
return IgnorePointer(
ignoring: isLoading,
child: ElevatedButton(
onPressed: () {},
child: isLoading ? CircularProgressIndicator.adaptive() : Text("Go",),
),
);
},
)
wait
方法
// 在 GetxControllerPlus 范围内运行 Future 并自动管理 isLoading 状态
final result = await wait(
download(),
);
- 支持
LoadAwareGetView
和LoadAwareWillPopScope
控件
import 'package:get_controller_plus/support_widgets.dart';
LoadAwareGetView<MySmartController>(
builder: (BuildContext context, bool isLoading, Widget? child) {
if (isLoading) {
return CircularProgressIndicator.adaptive();
} else {
return MySmartView();
}
},
)
// 如果 isLoading 为真,则不会弹出此 widget
LoadAwareWillPopScope<MySmartController>(
// 可以覆盖默认的 onWillPop 行为
// onWillPop: ...
child: Scaffold(),
)
错误处理
GetxControllerPlus
提供了两个额外的方法来处理错误。
setErrorHandler<T>
// 公共方法,可以在 View 范围或控制器范围本身调用
// 首先设置它以便在 handleError 方法中可用
// 在视图中
controller.setErrorHandler<IOException>(
showAlertDialog(
context: context,
builder: (BuildContext context) {
return AlertDialog(
title: Text("Error",),
content: Text("Connection Error!",),
);
},
),
);
// 在控制器中
// 最好在 onInit 状态中设置
void _showFormatError() {
_hasError.value = true;
}
@override
void onInit() {
super.onInit();
setErrorHandler<FormatException>(
_showFormatError,
);
}
handleError(Object err)
// 受保护的方法,在控制器范围内调用
Future<void> doSomething() async {
try {
// myMagic();
} catch (err) {
handleError(err,);
}
}
更多关于Flutter控制器管理插件get_controller_plus的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter控制器管理插件get_controller_plus的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,下面是一个关于如何在Flutter项目中使用get_controller_plus
插件来管理控制器的示例代码。get_controller_plus
是一个用于简化Flutter中控制器(如TextEditingController
)管理的插件,它通常与get
包一起使用,以便更方便地在整个应用程序中访问和更新状态。
首先,确保你已经在pubspec.yaml
文件中添加了get
和get_controller_plus
依赖:
dependencies:
flutter:
sdk: flutter
get: ^4.6.1 # 请检查最新版本
get_controller_plus: ^1.0.0 # 请检查最新版本
然后,运行flutter pub get
来安装这些依赖。
接下来,我们创建一个简单的示例,展示如何使用get_controller_plus
来管理一个TextEditingController
。
1. 创建控制器类
首先,创建一个继承自GetxController
的控制器类,并在其中定义你的控制器属性。例如,我们可以创建一个MyController
类来管理一个文本编辑控制器。
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:get_controller_plus/get_controller_plus.dart';
class MyController extends GetxController with GetSingleTickerProviderStateMixin {
final TextEditingController textController = TextEditingController();
@override
void onInit() {
super.onInit();
// 可以在这里初始化控制器,比如设置初始文本
textController.text = 'Hello, Get_controller_plus!';
}
@override
void onClose() {
// 清理资源,比如释放控制器
textController.dispose();
super.onClose();
}
}
2. 在应用中绑定控制器
在你的应用入口(通常是main.dart
)中,使用Get.put
来绑定控制器。
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'my_controller.dart';
void main() {
runApp(GetMaterialApp(
home: MyHomePage(),
getPages: [
GetPage(name: '/', page: () => MyHomePage()),
// 其他页面路由
],
initialBinding: MyBindings(),
));
}
class MyBindings implements Bindings {
@override
void dependencies() {
Get.put(MyController());
}
}
class MyHomePage extends StatelessWidget {
@override
Widget build(BuildContext context) {
final MyController controller = Get.find<MyController>();
return Scaffold(
appBar: AppBar(title: Text('Get_controller_plus Example')),
body: Center(
child: TextField(
controller: controller.textController,
decoration: InputDecoration(hintText: 'Type something...'),
),
),
);
}
}
3. 使用控制器
在你的页面或组件中,使用Get.find
来获取并使用控制器。如上例所示,我们在MyHomePage
中已经展示了如何获取并使用textController
。
4. 响应式更新(可选)
如果你想在控制器属性值变化时自动更新UI,可以结合GetX
或Obx
来使用。例如,如果你想监听文本变化并做一些处理,可以在控制器中添加一个RxString
属性,并在UI中使用Obx
来监听变化。
class MyController extends GetxController with GetSingleTickerProviderStateMixin {
final TextEditingController textController = TextEditingController();
RxString text = ''.obs; // 响应式字符串
@override
void onInit() {
super.onInit();
textController.addListener(() {
text.value = textController.text; // 当文本变化时更新响应式字符串
});
textController.text = 'Hello, Get_controller_plus!';
}
@override
void onClose() {
textController.dispose();
super.onClose();
}
}
// 在UI中使用Obx来监听text的变化
class MyHomePage extends StatelessWidget {
@override
Widget build(BuildContext context) {
final MyController controller = Get.find<MyController>();
return Scaffold(
appBar: AppBar(title: Text('Get_controller_plus Example')),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
TextField(
controller: controller.textController,
decoration: InputDecoration(hintText: 'Type something...'),
),
SizedBox(height: 20),
Obx(() => Text('You typed: ${controller.text}')), // 响应式显示文本
],
),
),
);
}
}
以上就是一个简单的使用get_controller_plus
来管理Flutter控制器的示例。通过结合get
包,你可以更方便地在整个应用中管理和访问状态。