Flutter中shared_preferences无法保存变量的问题求助
未等待异步写入完成
shared_preferences的所有set方法都是异步操作,如果调用后未等待完成就退出应用,写入操作可能被中断。必须用await确保写入完成:Future<void> saveHomeConfig() async { final prefs = await SharedPreferences.getInstance(); // 等待每个写入操作完成 await prefs.setString('exercise1', exercise1); await prefs.setString('exercise1time', exercise1time); }生命周期时机选择错误
仅在手动关闭按钮点击时保存,无法覆盖系统强制杀后台、设备重启等场景。建议监听应用生命周期,在应用进入后台时触发保存:@override void didChangeAppLifecycleState(AppLifecycleState state) { super.didChangeAppLifecycleState(state); if (state == AppLifecycleState.paused) { saveHomeConfig().then((_) => print('配置已保存')); } }键名不一致
保存和读取时的键名拼写、大小写不匹配,会导致读取不到数据。建议用常量统一管理键名:// 定义全局常量键名 const String keyExercise1 = 'exercise1'; const String keyExercise1Time = 'exercise1time'; // 保存 await prefs.setString(keyExercise1, exercise1); // 读取 exercise1 = prefs.getString(keyExercise1) ?? '';数据类型不匹配
保存和读取的方法类型不对应,比如用setInt保存整数,却用getString读取,会返回null。需严格对应:- 字符串:
setString↔getString - 整数:
setInt↔getInt - 布尔值:
setBool↔getBool
- 字符串:
未捕获写入异常
存储权限不足、存储空间不足等问题会导致写入失败,需添加异常捕获排查:Future<void> saveHomeConfig() async { try { final prefs = await SharedPreferences.getInstance(); await prefs.setString('exercise1', exercise1); await prefs.setString('exercise1time', exercise1time); } catch (e) { print('保存配置失败: $e'); } }测试环境异常
模拟器或真机中,频繁卸载重装应用可能导致shared_preferences的存储目录损坏。可尝试清除应用数据后重新测试。
内容的提问来源于stack exchange,提问作者nsa41620
相关产品推荐
相关产品推荐

