介绍

在本地存储数据并在应用启动之间持续存在是任何移动应用开发过程中的基本概念之一。几乎每一个应用程序都需要你处理数据-游戏中的得分数量或者一个简单的值来了解用户在最后一次访问时是否开启了黑暗模式

Flutter提供了许多本地数据持久化选项供开发者选择。

Hive是一个轻量级和快速的键值数据库解决方案,它是跨平台的(在移动、桌面和网络上运行),并且是用纯Dart编写的。这使得它比不支持Flutter网络的sqflite更有优势--Hive没有原生的依赖性,所以它可以在网络上无缝运行。

Untitled

依赖文件:

hive: ^2.2.3
hive_flutter: ^1.1.0

快速入门

  1. 修改启动函数:
Future<void> main() async {
  await Hive.initFlutter();
  await Hive.openBox('box');
  runApp(const MyApp());
}
  1. 创建一个数据库对象,如果要操作数据库最好都要使用这个对象
class ToDoDataBase {
  List list = [];
  final Box box = Hive.box('mybox');

  void init() {
    if(box.get("TODOLIST") == null) {
      create();
    }else {
      load();
    }
  }

  void create() {
    list = [
      ["hahah1", false],
      ["xixixi", true],
    ];
  }

  void load() {
    list = box.get("TODOLIST");
  }
  void save() {
    box.put("TODOLIST", list);
  }
}
  1. 在Fluuter界面中操作数据库
// 删除数据库
deleteTask(int index) {
  setState(() {
    db.list.removeAt(index);
  });
  db.save();
}

// 修改数据库
onTap(int index) {
  setState(() {
    db.list[index][1] = !db.list[index][1];
  });
  db.save();
}

存储自定义对象

修改原始对象

@HiveType(typeId: 0)
class TodoModel extends HiveObject {
  @HiveField(0)
  bool isComplete;
  @HiveField(1)
  String title;
  TodoModel(this.isComplete, this.title);

  @override
  String toString() {
    return 'todoModel{isComplete: $isComplete, title: $title}';
  }
}

通过ChatGPT生成一个Adapter