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更好:
- 添加
hive和hive_flutter依赖 - 初始化Hive并创建存储Box
- 读写逻辑和SharedPreferences类似,但支持更多自定义数据类型
方案三:SQLite(适合大量结构化数据)
如果需要存储大量关联数据可以用SQLite,但对于单个布尔值来说过于笨重,一般不推荐。
内容的提问来源于stack exchange,提问作者hazem saad
相关产品推荐
相关产品推荐

