当前位置: 首页 > news >正文

GetX例子:在一个组件里更新状态,在另一个组件里获取更新的数据

下面是一个完整的 GetX 示例,演示如何在一个组件中更新状态,并在另一个组件中获取更新后的数据。我们将使用 GetX 的状态管理工具(GetxController + Obx/GetBuilder)。


1. 定义 Controller

首先,创建一个 GetxController 来管理状态。

counter_controller.dart
import 'package:get/get.dart';class CounterController extends GetxController {// 使用 Rx 包裹的响应式变量RxInt count = 0.obs;// 更新状态的方法void increment() {count.value++;}
}

2. 在 WidgetA 中更新状态

创建一个按钮组件,点击时调用 increment() 更新状态。

widget_a.dart
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'counter_controller.dart';class WidgetA extends StatelessWidget {final CounterController controller = Get.put(CounterController());WidgetA({super.key});Widget build(BuildContext context) {return ElevatedButton(onPressed: () {// 调用 Controller 的方法更新状态controller.increment();},child: const Text('Increment Counter'),);}
}

3. 在 WidgetB 中获取状态

另一个组件监听 count 的变化,并实时显示最新值。这里提供两种方式:

方式 1:使用 Obx(响应式更新)
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'counter_controller.dart';class WidgetB extends StatelessWidget {WidgetB({super.key});Widget build(BuildContext context) {final CounterController controller = Get.find<CounterController>();return Obx(() => Text('Current Count: ${controller.count.value}',style: Theme.of(context).textTheme.headlineMedium,),);}
}
方式 2:使用 GetBuilder(局部更新)
class WidgetB extends StatelessWidget {WidgetB({super.key});Widget build(BuildContext context) {return GetBuilder<CounterController>(builder: (controller) {return Text('Current Count: ${controller.count.value}',style: Theme.of(context).textTheme.headlineMedium,);},);}
}

4. 整合到主页面

将两个组件放在同一个页面中测试。

main.dart
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'widget_a.dart';
import 'widget_b.dart';void main() {runApp(const MyApp());
}class MyApp extends StatelessWidget {const MyApp({super.key});Widget build(BuildContext context) {return GetMaterialApp( // 注意:必须用 GetMaterialApphome: Scaffold(appBar: AppBar(title: const Text('GetX Example')),body: const Center(child: Column(mainAxisAlignment: MainAxisAlignment.center,children: [WidgetB(), // 显示状态SizedBox(height: 20),WidgetA(), // 更新状态],),),),);}
}

效果

  • 点击 WidgetA 的按钮时,CounterController 中的 count 会递增。
  • WidgetB 会自动刷新并显示最新的计数器值。

关键点说明

  1. Get.put() vs Get.find()

    • Get.put():注册 Controller(通常在首次使用时调用)。
    • Get.find():获取已注册的 Controller(无需重复创建)。
  2. 响应式 vs 非响应式

    • Obx:监听 .obs 变量,变化时自动刷新(需配合 Rx 类型)。
    • GetBuilder:手动调用 update() 时刷新(适合非响应式变量)。
  3. GetMaterialApp

    • 必须使用 GetMaterialApp 替代 MaterialApp,这是 GetX 的根上下文。

补充:如何手动触发更新?

如果在 CounterController 中不使用 .obs,可以通过 update() 方法通知界面刷新:

class CounterController extends GetxController {int count = 0;void increment() {count++;update(); // 通知 GetBuilder 刷新}
}

此时 WidgetB 必须使用 GetBuilder 才能生效。


通过这个例子,你可以清晰看到 GetX 的状态更新跨组件共享状态的流程。GetX 的语法更简洁,适合中小型项目快速开发。

相关文章:

  • 基于 Transformer RoBERTa的情感分类任务实践总结之四——PGM、EMA
  • LSTM梯度推导与梯度消失机制解析
  • 电子垃圾之涂鸦控制板
  • OrangePi 5 Max EMMC 系统烧录时下载成功,启动失败解决方案
  • matlab设计滤波器及导出系数python调用
  • Matlab 实现基于深度学习的高压开关柜多故障实时检测方法研究
  • 解决vscode中使用debuger运行app.py但是报错No module named app的方法
  • vue 导航 + router-view 局部刷新
  • 使用cmake安装faiss-GPU.so(无网或者内网情况下)
  • Eureka 心跳续约机制
  • faiss上的GPU流程,GPU与CPU之间的联系
  • 【软件开发】上位机 下位机概念
  • 榕壹云信用租赁系统:免押金全品类租赁解决方案,区块链+多因子认证赋能
  • 【洛杉矶实况】这里正在发生什么?
  • STM32——“扩展动态随机存储器SDRAM”
  • GPU-CPU-FPGA三维异构计算统一内存架构实践:基于OpenCL的跨设备Kernel动态迁移方案(附内存一致性协议设计)
  • sqlmap 的基本用法
  • C++上学抄近路 动态规划算法实现 CCF信息学奥赛C++ 中小学普及组 CSP-J C++算法案例学习
  • Chroma 向量数据库学习笔记
  • Linux服务器安装mamba
  • 国内互动网站建设/泉州seo代理计费
  • 餐饮网站网页设计代码/西安网络优化大的公司
  • 创业网站开发/站长之家seo工具包
  • 国外建设网站流程/免费网站排名优化在线
  • 我做的网站搜不到/app注册推广
  • 从事网站开发的想考研/陕西seo公司