📘

【Flutter】Hiveを使ってList<int>を保存・復元する

2023/05/21に公開

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