見出し画像

Flutterでhiveを使ってみた

初めましてblueです。

現在、業務系のスマホアプリを開発しております。
そこでローカルにデータを保存する必要があったので、
今回は「hive」を使用してみました!

使用パッケージ

特徴

・NoSQL
・SQLiteよりも高速

名称未設定1

導入方法

pubspec.yamlに下記を追加

dependencies:
 hive: ^2.0.4
 hive_flutter: ^1.1.0
 
dev_dependencies:
 hive_generator: ^1.1.0
 build_runner: ^2.0.6

初期化

await Hive.initFlutter();

hiveはボックスがデータベースみたいな感じになります。

ボックスを開く/閉じる

//ボックスを開く
//ボックス名はどんな名前でも問題ないはず
var box = await Hive.openBox('testbox');

//ボックスを閉じる
await box.close();

ボックスを開くことで以下のことが出来る

//データを読み込む
//「name」をボックスから読み込む
box.get('name');

//データを書き込む
//「name」に「太郎」を書き込む
box.put('name', '太郎');

//データを削除する
box.delete('key2');

アダプターを生成する

モデルとなるクラスを作成

import 'package:hive/hive.dart';

part 'test.g.dart';

@HiveType(typeId: 0)

class TestModel {
 @HiveField(0)
 int id;
 @HiveField(1)
 String name;

 TestModel({
   this.id,
   this.name});

}

その後、ターミナルで下記を実行

flutter pub run build_runner build

test.g.dart が生成される
※基本的にこのファイルを修正することはないです。

// GENERATED CODE - DO NOT MODIFY BY HAND
part of 'test.dart';
// **************************************************************************
// TypeAdapterGenerator
// **************************************************************************
class TestModelAdapter extends TypeAdapter<TestModel> {
 @override
 final int typeId = 0;
 @override
 TestModel read(BinaryReader reader) {
   final numOfFields = reader.readByte();
   final fields = <int, dynamic>{
     for (int i = 0; i < numOfFields; i++) reader.readByte(): reader.read(),
   };
   return TestModel(
     id: fields[0] as int,
     name: fields[1] as String,
   );
 }
 @override
 void write(BinaryWriter writer, TestModel obj) {
   writer
     ..writeByte(2)
     ..writeByte(0)
     ..write(obj.id)
     ..writeByte(1)
     ..write(obj.name);
 }
 @override
 int get hashCode => typeId.hashCode;
 @override
 bool operator ==(Object other) =>
     identical(this, other) ||
     other is TestModelAdapter &&
         runtimeType == other.runtimeType &&
         typeId == other.typeId;
}​

アダプターを登録する

await Hive.registerAdapter(TestModelAdapter());

アダプター生成・登録することでBOXを開くことが出来るようになり、
データの読み取り・書き込み・削除が出来るようになります。

いいなと思ったら応援しよう!

blue
良かったらサポートしていただけると嬉しいです!