📘
【Flutter】Hiveを使ってList<int>を保存・復元する
Hiveを使って、配列 List<int>の保存について。
box.put() でそのまま保存はできないため調査。
- 保存: asMap()したものをでputAll
- 取得: values.toList()し、cast<int>
メインのコード
import 'package:hive/hive.dart';
class IndexesListRepository {
// box名
String boxName = 'int_list';
// boxの取得
Future<Box> openBox() async {
Box box = await Hive.openBox(boxName);
return box;
}
// 保存されている List<int>の取得
List<int> getList(Box box) {
return box.values.toList().cast<int>();
}
// List<int>を保存
Future<void> putList(Box box, List<int> list) async {
await box.putAll(list.asMap());
}
// データの消去
Future<void> clearList(Box box) async {
await box.clear();
}
}
メインのコードを使用したテストコード
- List<int> の取得ができること
- List<int> の保存できること
- 保持データの削除ができること
void test() async {
// インスタンス作成
final IndexesListRepository indexesListRepository = IndexesListRepository();
// Boxインスタンスの取得
final Box indexesListRepositoryBox = await indexesListRepository.openBox();
// リストの取得
List<int> list = indexesListRepository.getList(indexesListRepositoryBox);
// 結果の確認
if(list.isEmpty){
print('リスト空');
}else{
print('リスト有り');
print(list);
}
// -> リスト空
// リストの保存
final List<int> intList = [1, 2, 3, 5, 5, 6, 7, 8, 9, 10, 11, 12];
await indexesListRepository.putList(indexesListRepositoryBox, intList);
// リストの取得
list = indexesListRepository.getList(indexesListRepositoryBox);
// 結果の確認
if(list.isEmpty){
print('リスト空');
}else{
print('リスト有り');
print(list);
}
// -> リスト有り
// [1, 2, 3, 5, 5, 6, 7, 8, 9, 10, 11, 12]
// リスト削除
await indexesListRepository.clearList(indexesListRepositoryBox);
// リストの取得
list = indexesListRepository.getList(indexesListRepositoryBox);
// 結果の確認
if(list.isEmpty){
print('リスト空');
}else{
print('リスト有り');
print(list);
}
// -> リスト空
}
Discussion