You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 07:27:29