Flutter 如何通过设置页SwitchListTile布尔值控制首页振动开关
实现方案
你已经用SharedPreferences做了状态持久化,只需要调整两处代码就能实现需求:
1. 修复空值异常(可选但必要)
设置页读取开关状态时添加默认值,避免首次启动无存储值时报空错误,修改MySettingPage的getSwitchState方法:
Future<bool> getSwitchState() async { SharedPreferences prefs = await SharedPreferences.getInstance(); // 首次读取无值时默认返回false(关闭振动) bool isVibrate = prefs.getBool("switchState") ?? false; return isVibrate; }
2. 首页直接读取持久化的开关状态
不需要通过构造函数传递开关状态,每次点击时直接读取本地存储的最新配置,修改MyHomePage的代码:
- 先移除
MyHomePage构造函数中没用的isVibrate参数 - 修改
_incrementCounter方法逻辑:
void _incrementCounter() async { // 每次点击都读取最新的开关配置 SharedPreferences prefs = await SharedPreferences.getInstance(); bool isVibrateEnabled = prefs.getBool("switchState") ?? false; setState(() { _counter++; if (isVibrateEnabled) { Vibration.vibrate(duration: 70); } else { Vibration.cancel(); } }); }
可选优化:切换设置返回首页后立即生效
如果想要用户改完设置回到首页立刻生效,不需要等下次启动,可以在首页跳转设置页的地方添加返回回调:
onPressed: () async { // 等待设置页关闭返回 await Navigator.push( context, MaterialPageRoute( builder: (BuildContext context) => MySettingPage(), )); // 返回后可以预读一次开关状态存到本地变量,减少每次点击的IO操作 },
内容的提问来源于stack exchange,提问作者Ary Anzh
相关产品推荐
相关产品推荐

