Flutter技术求助:如何用Shared Preferences保存CheckboxListTile的bool值
以下是修复后的完整代码,已实现复选框状态的持久化保存:
import 'package:flutter/material.dart'; import 'package:shared_preferences/shared_preferences.dart'; void main() => runApp(const MyApp()); class MyApp extends StatelessWidget { const MyApp({super.key}); @override Widget build(BuildContext context) { return const MaterialApp( title: 'Gym', home: MyStatefulWidget(), ); } } class MyStatefulWidget extends StatefulWidget { const MyStatefulWidget({super.key}); @override State<MyStatefulWidget> createState() => _MyStatefulWidgetState(); } class _MyStatefulWidgetState extends State<MyStatefulWidget> { bool _test = false; @override void initState() { _loadData(); super.initState(); } void _loadData() async { SharedPreferences prefs = await SharedPreferences.getInstance(); setState(() { // 处理getBool返回null的情况,默认设为false _test = prefs.getBool('option') ?? false; }); } void _saveBool() async { SharedPreferences prefs = await SharedPreferences.getInstance(); // 将当前复选框状态存入SharedPreferences await prefs.setBool('option', _test); } @override Widget build(BuildContext context) { return Scaffold( body: Center( child: CheckboxListTile( title: const Text("选项"), value: _test, onChanged: (val) { setState(() { // 使用回调返回的val更新状态,逻辑更准确 _test = val!; _saveBool(); }); }, ), ), ); } }
核心修复点说明:
- 补全状态加载逻辑:
_loadData中获取到保存的值后,通过setState更新界面状态,同时处理getBool可能返回null的场景。 - 完善保存逻辑:
_saveBool中调用setBool方法,真正将当前复选框状态写入SharedPreferences。 - 修正语法错误:移除
_saveBool上错误的@override注解,简化状态变量的声明写法。 - 优化状态更新:直接使用
onChanged回调返回的val更新状态,避免手动取反可能导致的逻辑偏差。
内容的提问来源于stack exchange,提问作者Lockz
相关产品推荐
相关产品推荐

