Flutter Dart中如何创建两个独立的GetxController实例?
解决GetX中创建多个独立Controller实例的问题
问题原因
GetX的Get.put()默认基于Controller类型管理单例。两次调用Get.put(NumberController())时,因为是同一类型,GetX会返回已存在的实例,导致controller1和controller2指向同一个对象,数据操作自然会共享。
解决方案
通过tag参数为每个实例指定唯一标识,让GetX区分不同的独立实例。
完整代码示例
NumberController 定义
import 'package:get/get.dart'; class NumberController extends GetxController { final RxList<int> _numbers = <int>[].obs; // 返回不可变列表副本,避免外部直接修改内部数据 List<int> get getNumbers => List.unmodifiable(_numbers); void addNumber(int num) { _numbers.add(num); } }
修改后的main函数
void main() { NumberController controller1; NumberController controller2; // 用tag标记第一个独立实例 controller1 = Get.put(NumberController(), tag: 'controller1'); controller1.addNumber(10); controller1.addNumber(20); controller1.addNumber(30); print(controller1.getNumbers.toString()); // 输出:[10, 20, 30] // 用不同tag创建第二个独立实例 controller2 = Get.put(NumberController(), tag: 'controller2'); controller2.addNumber(1000); controller2.addNumber(2000); print('Now ' + controller2.getNumbers.toString()); // 输出:Now [1000, 2000] }
补充说明
- 后续通过
Get.find()获取实例时,必须携带对应tag:var c1 = Get.find<NumberController>(tag: 'controller1'); var c2 = Get.find<NumberController>(tag: 'controller2'); - 实例不再使用时,通过tag销毁以避免内存泄漏:
Get.delete<NumberController>(tag: 'controller1'); Get.delete<NumberController>(tag: 'controller2');
内容的提问来源于stack exchange,提问作者user22362195
相关产品推荐
相关产品推荐

