Flutter GetX 中 obx 和 getBuild绑定数据的区别

发布于 1周前 作者 itying888 最后一次编辑是 5天前 来自 Flutter

Flutter+Getx仿小米APP系列教程https://www.itying.com/goods-1176.html

Flutter GetX 中 obx 和 getBuild绑定数据的区别是什么呢?下面带大家一起看看

写项目的时候obx用的更多一些,getBuild 也会用到,tab切换里面挂载的页面,进行tab切换默认不会触发每个页面的onInit方法,这个时候如果想进入到某个页面更新数据的时候,就可以用到getBuild 。

obx提供了更简洁、便捷和性能优化的方式来观察和更新状态,特别适用于小规模的状态管理和局部UI更新。而GetBuilder则更适合于需要手动控制重绘粒度或更复杂的状态管理场景。

Flutter GetX中obx绑定数据的例子

import 'package:flutter/material.dart';
import 'package:get/get.dart';

// 创建一个控制器类
class MyController extends GetxController {
  var count = 0.obs; // 使用.obs将count变为可观察的(Observable)
  
  void increment() {
    count.value++; // 修改可观察变量的值
  }
}

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  final MyController controller = Get.put(MyController()); // 注入控制器

  @override
  Widget build(BuildContext context) {
    return GetMaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('GetX obx Example'),
        ),
        body: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: [
              // 使用obx观察和更新状态
              Obx(() => Text(
                'Count: ${controller.count.value}', // 获取可观察变量的值
                style: TextStyle(fontSize: 24),
              )),
              SizedBox(height: 16),
              ElevatedButton(
                onPressed: () {
                  controller.increment(); // 调用控制器的方法来更新状态
                },
                child: Text('Increment'),
              ),
            ],
          ),
        ),
      ),
    );
  }
}

Flutter GetX中getBuilder绑定数据的例子

import 'package:flutter/material.dart';
import 'package:get/get.dart';
// 创建一个控制器类
class MyController extends GetxController {
  var count = 0;

  void increment() {
    count++;
    update(); // 手动触发UI更新
  }
}
void main() {
  runApp(MyApp());
}
class MyApp extends StatelessWidget {
  final MyController controller = Get.put(MyController()); // 注入控制器
  @override
  Widget build(BuildContext context) {
    return GetMaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('GetX GetBuilder Example'),
        ),
        body: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: [
              // 使用GetBuilder观察和更新状态
            GetBuilder<MyController>(
              initState: (state) {
                  //获取购物车数据
              },
              init: controller,
                builder: (controller) => Text(
                  'Count: ${controller.count}', // 获取控制器的属性值
                  style: TextStyle(fontSize: 24),
                ),
              ),
              SizedBox(height: 16),
              ElevatedButton(
                onPressed: () {
                  controller.increment(); // 调用控制器的方法来更新状态
                },
                child: Text('Increment'),
              ),
            ],
          ),
        ),
      ),
    );
  }
}
回到顶部