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

Flutter使用GetX遇“检测到GetX使用不当”错误,求解决方案

GetX "improper use"错误原因及解决方法

原因分析

  • Obx的核心逻辑是追踪其builder函数内部被访问的Observable变量,你当前仅把Observable列表作为参数传给DropDownMultiSelect,但未在builder函数内读取这些Observable的实际值(如.value),导致Obx检测不到需要监听的变化,触发错误。
  • onChanged里新建RxList再赋值给selectedBanks的写法冗余,完全没必要创建新的Observable实例,原Observable本身就支持直接更新数据。

解决方法

  1. 在Obx的builder函数内部,显式读取Observable的.value属性,让Obx能追踪到变量变化。
  2. 用Observable自带的更新方法(如assignAll)替换新建RxList的逻辑,避免不必要的实例创建。

修改后的代码示例

// 控制器中的Observable定义保持不变
RxList<String> selectedBanks = <String>[].obs;
RxList<String> banksSHTextList = <String>[].obs;

// 修正后的Obx组件
Obx(
  () => DropDownMultiSelect(
    onChanged: (List<String> x) {
      // 直接更新原Observable,无需新建RxList
      _dbsController.selectedBanks.assignAll(x);
    },
    isDense: false,
    // 显式读取Observable的值,触发Obx的监听
    options: _dbsController.banksSHTextList.value,
    selectedValues: _dbsController.selectedBanks.value,
    whenEmpty: 'Seçiniz',
  ),
),

额外说明

如果DropDownMultiSelect是你自定义的组件,希望直接接收Observable列表,那需要在组件内部用Obx/GetX包裹需要根据列表更新的UI部分,确保变化能被正确监听。但第三方多选下拉组件通常只接收普通List,所以上述.value的写法是通用解决方案。

内容的提问来源于stack exchange,提问作者Mert

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 21:52:40