Flutter Hive
Flutterで使えるアプリ内NoSQL
いろんなライブラリのキャッシュなどに使われることが多い
Usage
Hiveではデータを格納する先をBoxと表現している
code:dart
var box = await Hive.openBox('testBox');
各ボックス毎にシングルトンなインスタンスを生成する
一度openしたら、同期的に取ってきてもOK
openBoxはFutureを返す
code:dart
var box = await Hive.openBox<E>('testBox');
Hive.boxはBoxインスタンスを返す
code:dart
var box = Hive.box('myBox');
put/getで読み書きする
code:dart
import 'package:hive/hive.dart';
void main() async {
//Hive.init('somePath') -> not needed in browser
var box = await Hive.openBox('testBox');
box.put('name', 'David');
print('Name: ${box.get('name')}');
}
プリミティブな型以外も保存できる
ただし、このケースではType Adapterを作る必要がある
code:dart
@HiveType(typeId: 0)
class Person extends HiveObject {
@HiveField(0)
String name;
@HiveField(1)
int age;
}
Freezedと組み合わせる場合はhive_generatorが必要らしい
Flutterで使う場合
Hive.initFlutterを呼んであげる必要がある
code:dart
import 'package:flutter/material.dart';
import 'package:hive/hive.dart';
import 'package:hive_flutter/hive_flutter.dart';
void main() async {
await Hive.initFlutter();
await Hive.openBox('settings');
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Demo Settings',
home: Scaffold(
body: ValueListenableBuilder<Box>(
valueListenable: Hive.box('settings').listenable(),
builder: (context, box, widget) {
return Center(
child: Switch(
value: box.get('darkMode', defaultValue: false),
onChanged: (val) {
box.put('darkMode', val);
},
),
);
},
),
),
);
}
}