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

Flutter使用GetX时退出页面变量重置,如何保留页面数据?

问题原因

你当前是将maintasks变量存储在页面的State类中,调用Get.back()退出页面后,页面实例和对应的State会被系统回收销毁,下次重新进入页面时会初始化全新的State实例,所以变量会被重置。setState只能管理当前State生命周期内的状态,无法跨页面销毁场景留存数据。

解决方法(基于GetX框架能力实现)

利用GetX的Controller托管需要持久留存的状态,将状态的生命周期和页面生命周期解绑:

步骤1:创建自定义Controller托管状态

继承GetxController,将需要留存的变量和修改方法都封装到Controller中:

class TaskController extends GetxController {
  // 定义可观测的maintasks变量
  RxString maintasks = '默认内容'.obs;

  // 修改maintasks的方法
  void updateMaintasks(String newContent) {
    maintasks.value = newContent;
  }
}

步骤2:注册Controller到GetX依赖管理

注册时设置permanent: true,保证页面销毁后Controller不会被GetX自动回收:
可以在App启动时(main函数中)注册,也可以在第一次进入目标页面前注册:

Get.put(TaskController(), permanent: true);

步骤3:页面中使用Controller的状态

页面中不再单独定义maintasks变量,直接从Controller中获取状态,并用Obx包裹需要响应状态变化的组件:

// 页面内部先获取Controller实例
final TaskController taskController = Get.find<TaskController>();

// 原来的Text组件改造
Align(
  alignment: Alignment.topLeft,
  child: Padding(
    padding: const EdgeInsets.only(left: 25.0),
    child: Obx(() => Text(
      taskController.maintasks.value,
      style: const TextStyle(
        fontSize: 23,
        color: Colors.black,
        fontWeight: FontWeight.w800,
      ),
    )),
  ),
),

步骤4:修改状态时调用Controller方法

用户输入完成需要更新maintasks时,直接调用Controller的更新方法即可:

// 假设newInput为用户输入的新内容
taskController.updateMaintasks(newInput);

补充说明

如果需要区分不同页面实例的独立状态,注册Controller时可以添加tag参数做唯一标识,获取时传入对应的tag即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 23:24:07