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

Flutter如何持久化保存变量值?重启应用保留修改结果

Flutter变量持久化解决方案

你当前定义的bool W1_D1_workout1 = false;是内存变量,应用重启后内存会被释放,所以值会恢复初始状态。要让修改后的值在重启后保留,得把数据存储到本地设备中,下面是几种实用方案:

方案一:SharedPreferences(适合简单数据如布尔、字符串)

这是最常用的轻量存储方案,完美匹配你的布尔值场景:

步骤1:添加依赖

在pubspec.yaml中添加依赖:

dependencies:
  shared_preferences: ^2.2.2

执行flutter pub get完成依赖安装。

步骤2:修改代码逻辑

替换原来的变量定义和按钮事件,改为从本地读取、存储状态:

late bool W1_D1_workout1;

@override
void initState() {
  super.initState();
  _loadWorkoutStatus(); // 初始化时从本地加载状态
}

// 从本地读取状态
void _loadWorkoutStatus() async {
  final prefs = await SharedPreferences.getInstance();
  setState(() {
    // 本地无数据时用默认值false
    W1_D1_workout1 = prefs.getBool('W1_D1_workout1') ?? false;
  });
}

// 将状态保存到本地
void _saveWorkoutStatus() async {
  final prefs = await SharedPreferences.getInstance();
  await prefs.setBool('W1_D1_workout1', true);
}

// 你的Container组件代码
Container(
  height: 40,width: 40,
  color: Colors.black87,
  child: MaterialButton(
    onPressed: (){
      _saveWorkoutStatus(); // 先存到本地
      setState(() {
        W1_D1_workout1 = true; // 更新内存变量
      });
      Navigator.pushReplacement(context, MaterialPageRoute(builder: (context)=>getCongratsScreen()));
    },
    child: Text('Done',style: TextStyle(fontSize: 20, fontWeight: FontWeight.w500,color: Colors.white),
    ),
  ),
),

方案二:Hive(适合复杂本地存储需求)

如果后续需要存储更多类型或结构的数据,Hive是更优选择——它是轻量NoSQL数据库,性能比SharedPreferences更好:

  1. 添加hive和hive_flutter依赖
  2. 初始化Hive并创建存储Box
  3. 读写逻辑和SharedPreferences类似,但支持更多自定义数据类型

方案三:SQLite(适合大量结构化数据)

如果需要存储大量关联数据可以用SQLite,但对于单个布尔值来说过于笨重,一般不推荐。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 11:33:18