Hive에 해당하는 객체 이외의 객체를 저장할 수도 있습니다.

6971 단어 FlutterDarthivetech
Hive가 지원되지 않는 객체를 저장하려면 다음과 같이 하십시오.
Hive는 모든 원본 및 List, Map, DataTime 및 Uint8 List에 해당합니다.
하지만 다른 대상을 저장하고 싶은 경우도 있다고 생각합니다.
파일 저장
· MaterialColor 저장
etc...
TypeAdater 만들기
객체를 바이너리 형식으로 변환하는 TypeAdapter를 만들고 등록하여 객체를 저장할 수 있습니다.
보통 하이브.generator를 사용하여 자동으로 생성하고 싶지만 대상이 지원하지 않습니다
Error: HiveError: Cannot write, unknown type: File. Did you forget to register an adapter? 
등의 오류로 저장할 수 없습니다.
TypeAdapter 자체 제작
File 객체의 TypeAdapter를 만듭니다.
file_adapter.dart
import 'dart:io';

import 'package:hive_flutter/adapters.dart';

class FileAdapter extends TypeAdapter<File> {
  
  final typeId = 223; // 0~223まで

  
  File read(BinaryReader reader) {
    final numOfFields = reader.readByte();
    final fields = <int, dynamic>{
      for (int i = 0; i < numOfFields; i++) reader.readByte(): reader.read(),
    };
    return File(fields[0] as String);
  }

  
  void write(BinaryWriter writer, File obj) {
    writer
      ..writeByte(1)
      ..writeByte(0)
      ..write(obj.path);
  }
}
작성된 어댑터를 register 어댑터로 등록합니다.
main.dart
void main() async {
  // Hive初期化
  await Hive.initFlutter();

  // Adapter登録
  Hive.registerAdapter(FileAdapter());

  runApp(child:const MyApp());
}
File 객체도 저장할 수 있습니다.
잘못된 점이나 개선된 점이 있다면
지적해 주셨으면 좋겠습니다.
참고 문헌
hive docs

좋은 웹페이지 즐겨찾기