逆水行舟用力撑,一篙松劲退千寻。这篇文章主要讲述Getx在flutter中响应式设计相关的知识,希望能为你提供帮助。
??本文正在参与51CTO HarmonyOS技术社区创作者激励-星光计划1.0??
GetX 中有 3 种响应式方法1.使用分离的构建器
文章图片
2.使用构建器小部件
文章图片
3.使用 if else 条件
文章图片
Bonus您也可以更改断点
文章图片
顺便说一下,GetX 的默认points是:
desktopChangePoint = 1200
tabletChangePoint = 600
watchChangePoint = 300
它超级简单而强大!
什么是 GetX 的状态管理解决方案?GetX 包有 3 种管理状态的方法。
它们是反应式 (GetBuilder)、非反应式 (GetX、Obx) 和混合式 (MixinBuilder)。
)
文章图片
Non-Reactive获取生成器?
?GetBuilder?
? 是一个简单的管理解决方案,仅在您需要时更新 UI。基本用法
class Controller extends GetxController {
int counter = 0;
increase() {
// Increases the counter
counter++;
// Updates the UI. If you don\'t use this method,
// the counter will update in the backend but you won\'t see it on the UI
update();
}
}
GetBuilder< Controller> (
init: Controller(), // you need to init controller only the first time
builder: (c) {
return ElevatedButton(
child: Text(\'${c.counter}\'),
onPressed: c.increase,
);
},
);
生命周期方法此外,您可以在控制器中使用生命周期方法。使用此属性,您将完全将业务层与表示层分开。
class Controller extends GetxController {
// To initialize something for the controller.
@override
void onInit() {
super.onInit();
}
// Called 1 frame after onInit(). It is the perfect place to enter
// navigation events, like snackbar, dialogs, or a new route, or
// async request.
@override
void onReady() {
super.onReady();
}
// Dispose resources or closing events or streams before the controller destroyed.
@override
void onClose() {
super.onClose();
}
}
此外,您可以在?
?GetBuilder?
??或 中定义它们??GetX?
?。GetBuilder< Controller> (
initState: (_) => controller.fetchApi(),
dispose: (_) => controller.closeStreams(),
builder: (_) => Text(\'${controller.username}\'),
),
Reactive什么是Reactive?在 Reactive 中,您的数据取决于流。当数据更改时,所有侦听器都会立即更新。这意味着使用?
?GetX?
??或??Obx?
??,您不再需要使用??update()?
?方法。GetX?
?GetX?
??是??GetBuilder?
?. 它基本上做同样的事情,但reactive方式。基本用法
class Controller extends GetxController {
// to define reactive data. Just add .obs property
final counter = 0.obs;
increase() {
// Ifyou want to reach the value of the counter just add .value property
counter.value++;
}
}
GetX< Controller> (
init: Controller(), // you need to init controller only the first time
builder: (c) {
return ElevatedButton(
child: Text(\'${c.counter.value}\'),
onPressed: c.increase,
);
},
);
定义Reactive变量其实很简单。只需将?
?.obs?
?属性添加到您的变量中,您就可以开始了final name = \'\'.obs;
final isLogged = false.obs;
final count = 0.obs;
final balance = 0.0.obs;
final number = 0.obs;
final items = < String> [].obs;
final myMap = < String, int> {}.obs;
// Custom classes - it can be any class
final user = User().obs;
粒度更新GetX 包还为我们提供了对正在更新的内容的精细更新控制。这意味着只会重建更改的小部件。其他小部件保持不变
import \'package:get/get.dart\';
class Controller extends GetxController {
final num1 = 0.obs;
final num2 = 0.obs;
int get sum => num1.value + num2.value;
increaseNum1() => num1.value++;
increaseNum2() => num2.value++;
}
GetX< Controller> (
builder: (c) {
print("Number #1 build");
return Text(\'${c.num1.value}\');
},
),
GetX< Controller> (
builder: (c) {
print("Number #2 build");
return Text(\'${c.num2.value}\');
},
),
GetX< Controller> (
builder: (c) {
print("Sum build");
return Text(\'${c.sum.value}\');
},
),
对象?
?Obx?
??是??GetX?
?.基本用法
class Controller extends GetxController {
final counter = 0.obs;
increase() {
counter.value++;
}
}
// Since Obx does not have an init method, you need to define it externally.
final c = Controller();
Obx(
(c) {
return ElevatedButton(
child: Text(\'${c.counter.value}\'),
onPressed: c.increase,
);
},
);
您也可以像这样到达控制器
class HomePage extends GetView< Controller> {
...
final data = https://www.songbingjia.com/android/controller.fetchApi();
}
GetBuilder 与 GetX 与 Obx实际上,他们都在做同样的工作。您可以使用一个到另一个
?
?GetBuilder?
??仅在需要时更新,??GetX?
??并??Obx?
?在数据更改时更新。之间唯一的区别?
?GetX?
??,并??Obx?
??是??GetX?
??具有类似的生命周期??init?
??,并且??dispose?
??,但是??Obx?
?没有。哪一个适合你的口味,随它去吧。
【Getx在flutter中响应式设计】??本文正在参与51CTO HarmonyOS技术社区创作者激励-星光计划1.0??
推荐阅读
- 树莓派之--格式化树莓派系统SD卡
- Linux: 硬件时钟, 系统时钟, 网络时钟, 时区修改和同步
- 一文带你看懂HarmonyOS如何适配多种终端
- EasyDSS调用转码服务合成视频的接口时无反应排查
- linux之tar使用技巧
- ssh
- linux软件包的管理
- linux dhcp服务器的安装
- linux权限管理