GetX中共有4 种状态管理, 分别是Obx, GetX, GetBuilder, ValueBuilder
但最常用的是 Obx 和 GetBuilder,

1 Obx

如果你的变量是.obs的,那么我们就使用Obx(()=>),它会在变量变更时自动刷新view
注意: 只能对字符串,数字,布尔这种非容器的数据类型用obs和Obx

  1. class StateObxView extends StatelessWidget {
  2. const StateObxView({Key? key}) : super(key: key);
  3. @override
  4. Widget build(BuildContext context) {
  5. // 在变量末尾添加.obs, 使得该变量可被观察
  6. final count = 0.obs;
  7. return Scaffold(
  8. appBar: AppBar(
  9. title: Text("Obx"),
  10. ),
  11. body: Center(
  12. child: Column(
  13. children: [
  14. // 当你想显示该值实时的变化, 用Obx包裹
  15. Obx(() => Text("count1 -> $count")),
  16. ElevatedButton(
  17. onPressed: () {
  18. count.value++;
  19. },
  20. child: Text("add"))
  21. ],
  22. )),
  23. );
  24. }
  25. }

2 GetBuilder

如果你的变量不是.obs的,那么我们就使用GetBuilder
如果你的变量是容器类型, 比如List, Map, 就必须用GetBuilder

因为子元素类型都要设置obs, 才能被Obx监测到

  1. class HomeController extends GetxController {
  2. int count = 0;
  3. void increment() {
  4. count++;
  5. update();
  6. }
  7. }
  1. class HomePage extends GetView<HomeController> {
  2. HomePage({Key? key}) : super(key: key);
  3. @override
  4. Widget build(BuildContext context) {
  5. return BaseScaffold(
  6. appBar: MyAppBar(
  7. centerTitle: true,
  8. title: MyTitle('首页'),
  9. leadingType: AppBarBackType.None,
  10. ),
  11. body: Container(
  12. child: GetBuilder<HomeController>(builder: (_) {
  13. return Center(child: Text(controller.count.toString()));
  14. }),
  15. ),
  16. );
  17. }
  18. }