Flutterでhiveを使ってみた
初めましてblueです。
現在、業務系のスマホアプリを開発しております。
そこでローカルにデータを保存する必要があったので、
今回は「hive」を使用してみました!
使用パッケージ
特徴
・NoSQL
・SQLiteよりも高速
導入方法
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を開くことが出来るようになり、
データの読み取り・書き込み・削除が出来るようになります。
いいなと思ったら応援しよう!
良かったらサポートしていただけると嬉しいです!