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

如何用Flutter Hive实现布尔变量的持久化存储?

解决Flutter中Hive实现bool变量持久化的问题

你遇到的问题核心是只修改了内存中的变量,没有将变更同步到Hive的本地存储中,重启App后内存重置,变量自然回到初始值。下面是最简实现步骤:

1. 确保Hive基础配置完成

如果还没添加依赖,先在pubspec.yaml中引入:

dependencies:
  flutter:
    sdk: flutter
  hive: ^2.2.3
  hive_flutter: ^1.1.0

然后在main函数中完成Hive初始化并打开存储用的Box:

import 'package:flutter/material.dart';
import 'package:hive/hive.dart';
import 'package:hive_flutter/hive_flutter.dart';

void main() async {
  // 初始化Hive
  await Hive.initFlutter();
  // 打开一个名为"app_settings"的Box,用于存储变量(名称可自定义)
  await Hive.openBox('app_settings');
  runApp(const MyApp());
}

2. 页面中实现变量的读取与持久化

不要直接声明bool x = false,而是从Hive的Box中读取值;修改变量后必须调用put方法将新值写入本地存储:

class HomePage extends StatefulWidget {
  const HomePage({super.key});

  @override
  State<HomePage> createState() => _HomePageState();
}

class _HomePageState extends State<HomePage> {
  late bool x;
  late bool y;
  late Box _settingsBox;

  @override
  void initState() {
    super.initState();
    // 获取已打开的Box实例
    _settingsBox = Hive.box('app_settings');
    // 从Box读取值,无存储值时用默认false
    x = _settingsBox.get('x', defaultValue: false);
    y = _settingsBox.get('y', defaultValue: false);
  }

  @override
  void dispose() {
    // 页面销毁时关闭Box(全局打开的话可省略,但推荐养成习惯)
    _settingsBox.close();
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: const Text('Hive持久化测试')),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            Text('当前x值:$x'),
            Text('当前y值:$y'),
            const SizedBox(height: 20),
            ElevatedButton(
              onPressed: () {
                setState(() {
                  x = true;
                  y = true;
                });
                // 关键:将新值写入Hive,实现持久化
                _settingsBox.put('x', x);
                _settingsBox.put('y', y);
              },
              child: const Text('设置x、y为true'),
            ),
          ],
        ),
      ),
    );
  }
}

核心要点

  • 变量初始化必须从Hive读取,而非硬编码默认值,这样重启App能加载之前的存储值
  • 修改变量后一定要调用put方法,否则变更只存在于内存中,不会持久化到本地
  • get方法的defaultValue参数用于处理首次打开App时无存储值的场景

内容的提问来源于stack exchange,提问作者hazem saad

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 18:17:22