Flutter中GetX系列六--GetxController/GetView使用详情
update();
·
GetxController介绍与使用指南
在实际的Flutter项目开发中,将UI代码与业务逻辑分离是保持项目架构清晰的关键。GetX框架提供的GetxController正是为此而生,它能有效提升代码可读性和维护性。
1. GetxController基础使用
应用程序入口设置
import 'package:flutter/material.dart';
import 'package:flutter_getx_example/GetXControllerExample/GetXControllerExample.dart';
import 'package:get/get.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
Widget build(BuildContext context) {
return GetMaterialApp(
title: "GetX",
home: GetXControllerExample(),
);
}
}
定义控制器
import 'package:flutter_getx_example/ObxCustomClassExample/Teacher.dart';
import 'package:get/get.dart';
class MyController extends GetxController {
var teacher = Teacher();
void convertToUpperCase() {
teacher.name.value = teacher.name.value.toUpperCase();
update();
}
}
使用控制器
import 'package:flutter/material.dart';
import 'package:flutter_getx_example/GetXControllerExample/MyController.dart';
import 'package:get/get.dart';
class GetXControllerExample extends StatelessWidget {
MyController myController = Get.put(MyController());
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text("GetX Obx---GetXController")),
body: Center(
child: Column(
children: [
GetBuilder<MyController>(
builder: (controller) {
return Text(
"我的名字是 ${controller.teacher.name}",
style: TextStyle(color: Colors.green, fontSize: 30),
);
},
),
ElevatedButton(
onPressed: () => myController.convertToUpperCase(),
child: Text("转换为大写"))
],
),
),
);
}
}
2. GetxController生命周期
class MyLifecycleController extends GetxController {
var count = 0;
void increment() async {
await Future.delayed(Duration(milliseconds: 3000));
count++;
update();
}
void onInit() {
print("初始化");
super.onInit();
}
void onReady() {
print("加载完成");
super.onReady();
}
void onClose() {
print("控制器被释放");
super.onClose();
}
}
3. 使用UniqueID局部更新
class CountController extends GetxController {
var count = 0;
void increment() {
count++;
update(['jimi_count']);
}
}
4. GetView简化开发
GetView是一个继承自StatelessWidget的便捷类,内置了控制器访问功能,特别适合使用appuploader这类iOS开发助手工具时快速构建原型。
class ShopPage extends GetView<ShopController> {
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text('Title')),
body: Center(
child: Obx(() => Text("${controller.counter}")),
),
);
}
}
5. Binding自动依赖注入
结合appuploader等开发工具时,Binding可以自动管理控制器的生命周期:
class ShopControllerBinding implements Bindings {
void dependencies() {
Get.lazyPut<ShopController>(() => ShopController());
}
}
在路由配置中使用:
GetPage(
name: "/shop",
page: () => ShopPage(),
binding: ShopControllerBinding(),
)
开发建议
- 对于需要频繁更新的UI,建议使用Obx或GetX
- 对于性能敏感的场景,GetBuilder是更好的选择
- 使用UniqueID可以实现局部更新,优化性能
- 结合appuploader等开发工具时,Binding模式可以简化依赖管理
通过合理使用GetxController,可以显著提升Flutter应用的开发效率和代码质量。
火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。
更多推荐
所有评论(0)