当前位置: 首页 > news >正文

flutter hive使用(复杂类)

敲一遍,你会懂的

包:

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


dev_dependencies:
  flutter_test:
    sdk: flutter
  hive_generator: ^2.0.1
  build_runner: ^2.4.7

类:(config.dart)

import 'package:hive/hive.dart';

part 'config.g.dart'; // 生成的文件

@HiveType(typeId: 0)
class Config extends HiveObject {
  @HiveField(0)
  String language;

  @HiveField(1)
  String theme;

  @HiveField(2)
  List<LanguageConfig> languages;

  Config({required this.language, required this.theme, required this.languages});
}

@HiveType(typeId: 1)
class LanguageConfig extends HiveObject {
  @HiveField(0)
  String language;

  @HiveField(1)
  String filePath;

  @HiveField(2)
  bool willTranslate;

  LanguageConfig({required this.language, required this.filePath, required this.willTranslate});
}

生成代码:

flutter packages pub run build_runner build

服务类:(hive_service.dart)

import 'package:hive/hive.dart';
import 'config.dart';

class HiveService {
  static const String configBoxName = 'configBox';

  // 打开 Box
  static Future<Box<Config>> openBox() async {
    return await Hive.openBox<Config>(configBoxName);
  }

  // 保存配置
  static Future<void> saveConfig(Config config) async {
    final box = await openBox();
    await box.put('config', config);
  }

  // 获取配置
  static Future<Config?> getConfig() async {
    final box = await openBox();
    return box.get('config');
  }
}

ui:(app.dart)

import 'package:flutter/material.dart';
import 'hive_service.dart';
import 'config.dart';

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: ConfigScreen(),
    );
  }
}

class ConfigScreen extends StatefulWidget {
  @override
  _ConfigScreenState createState() => _ConfigScreenState();
}

class _ConfigScreenState extends State<ConfigScreen> {
  Config? config;

  @override
  void initState() {
    super.initState();
    _loadConfig();
  }

  Future<void> _loadConfig() async {
    Config? savedConfig = await HiveService.getConfig();
    setState(() {
      config = savedConfig ??
          Config(language: "en", theme: "light", languages: [
            LanguageConfig(language: "English", filePath: "/path/en", willTranslate: true),
            LanguageConfig(language: "Chinese", filePath: "/path/zh", willTranslate: false),
          ]);
    });
  }

  Future<void> _saveConfig() async {
    if (config != null) {
      await HiveService.saveConfig(config!);
      ScaffoldMessenger.of(context).showSnackBar(SnackBar(content: Text("配置已保存")));
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text("Hive 配置存储 Demo")),
      body: config == null
          ? Center(child: CircularProgressIndicator())
          : Column(
        children: [
          ListTile(
            title: Text("当前语言: ${config!.language}"),
            trailing: DropdownButton<String>(
              value: config!.language,
              items: ["en", "zh"].map((lang) {
                return DropdownMenuItem(value: lang, child: Text(lang));
              }).toList(),
              onChanged: (val) {
                setState(() {
                  config!.language = val!;
                });
              },
            ),
          ),
          ListTile(
            title: Text("当前主题: ${config!.theme}"),
            trailing: DropdownButton<String>(
              value: config!.theme,
              items: ["light", "dark"].map((theme) {
                return DropdownMenuItem(value: theme, child: Text(theme));
              }).toList(),
              onChanged: (val) {
                setState(() {
                  config!.theme = val!;
                });
              },
            ),
          ),
          ElevatedButton(
            onPressed: _saveConfig,
            child: Text("保存配置"),
          ),
        ],
      ),
    );
  }
}

入口:(main.dart)

import 'package:flutter/material.dart';
import 'package:hive_flutter/hive_flutter.dart';
import 'app.dart';
import 'config.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();

  // 初始化 Hive
  await Hive.initFlutter();

  // 注册适配器
  Hive.registerAdapter(ConfigAdapter());
  Hive.registerAdapter(LanguageConfigAdapter());

  runApp(MyApp());
}

http://www.dtcms.com/a/15547.html

相关文章:

  • 如何在Flask中处理静态文件
  • DeepSeek生成思维导图
  • cxxopts位置参数示例
  • SEO短视频矩阵系统源码开发概述
  • 一维差分算法篇:高效处理区间加减
  • 三维重建(十二)——3D先验的使用
  • VisoMaster整合包及汉化
  • 如何用 Linux 权限管理打造无懈可击的系统?
  • Python编程笔记
  • 微软AutoGen高级功能——Selector Group Chat
  • pt->onnx->rknn(量化) step by step FAQ
  • Linux vmstat 命令
  • 【自学笔记】机器学习基础知识点总览-持续更新
  • Spring Data Neo4j
  • DeepSeek+Excel 效率翻倍
  • 详细解释一下HTTPS握手过程中的密钥交换?
  • 【Qt】QObject类的主要功能
  • C语言交换排序之快速排序
  • 解构缓存:基本思想、本地缓存、分布式缓存和多级缓存的探索
  • 虚拟环境测试部署应用
  • 一、大模型微调的前沿技术与应用
  • 基于HTML5 Canvas 和 JavaScript 实现的烟花动画效果
  • halo发布文章的插件问题分析
  • 【鸿蒙开发】第二十八章 应用状态的讲解、状态持久化、网络管理、应用数据持久化、文件上传下载
  • unity学习37:新版的动画器:动画状态机 Animator
  • DDoS技术解析
  • 热敏电阻的主要作用是什么
  • 便携式呼吸酒精测试仪
  • Cocos Creator 3.8 版本开发 2D 游戏常用组件和方法
  • 报名丨Computer useVoice Agent :使用 TEN 搭建你的 Mac Assistant