💾
Flutter で NoSQL の Hive を利用して永続化をする
導入
以下の4つを pubspeck.yaml
に追加します
hive
hive_flutter
hive_generator
build_runner
dependencies:
flutter:
sdk: flutter
hive: ^1.4.4+1
hive_flutter: ^0.3.1
dev_dependencies:
flutter_test:
sdk: flutter
hive_generator: ^0.8.2
build_runner: ^1.10.13
Entityを作成する
-
part '{Entity名}.g.dart'
を追加します。 -
@HiveType
アノテーションを追加します。typeIDで指定した値がModelごとの識別子となるようです。 - カラムのようなイメージで各プロパティに
@HiveField
アノテーションを追加します。
part 'ShoppingItem.g.dart';
(typeId: 1)
class ShoppingItem {
ShoppingItem(this.name, this.checked);
(0)
final String name;
(1)
final bool checked;
}
Adapter を作成する
以下のコマンドでAdapterを自動生成してもらいます。ここで最初に導入した hive_generator
, build_runner
が活躍します。
$ flutter pub run build_runner build
Hive の初期設定
-
Hive.initFlutter()
で初期化します - 作成したAdapterをセットします
import 'package:hive/hive.dart';
import 'package:hive_flutter/hive_flutter.dart';
void main() async {
// Hiveの初期化
await Hive.initFlutter();
Hive.registerAdapter(ShoppingItemAdapter());
runApp(KMShoppingList());
}
読み書き
オブジェクトの場合
final shoppingItem = ShoppingItem(inputText.first, false);
final box = await Hive.openBox<ShoppingItem>('shoppingItem');
// 永続化
box.add(shoppingItem);
// 取り出し
final shoppingItems = box.values.toList();
値の場合(mapで扱います)
// 一度openBoxで開いたboxは await なしの box で参照できるようです
final box = Hive.box('names');
box.put('name', 'みなみ');
var name = box.get('name');
Discussion