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

Flutter技术求助:如何用Shared Preferences保存CheckboxListTile的bool值

Flutter 使用 SharedPreferences 保存 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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 16:55:42