My flutter App uses Hive for local data Managing and Firebase for Cloud Data Storage.
I have a modal which uses Timestamp and FieldValue from Firebase package. I have also created the TypeAdapter and registered it for my custom modal in main Class.
When executing the app Hive throws the below error:
unhandled exception: hive error: cannot write, unknown type: Timestamp. did you forget to register an adapter?
Question:
How do I create a TypeAdapter for built in object types such as Timestamp and FieldValue of Firebase package(present in class: loud_firestore.dart) ?
Package:
dependencies:
hive: ^1.4.4
dev_dependencies:
hive_generator: ^0.7.1
build_runner:
Sample Code:
Main Class:
Hive.registerAdapter(SampleModalAdapter());
Modal Code:
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:hive/hive.dart';
part 'samplemodal.g.dart';
@HiveType(typeId: 1)
class SampleModal {
@HiveField(0)
String id;
@HiveField(1)
String title;
@HiveField(2)
Timestamp dateTime;
@HiveField(3)
FieldValue serverDateTime;
SampleModal({
this.id,
this.title,
this.dateTime,
this.serverDateTime,
});
}
Generated TypeAdapter Code:
// GENERATED CODE - DO NOT MODIFY BY HAND
part of 'samplemodal.dart';
// **************************************************************************
// TypeAdapterGenerator
// **************************************************************************
class SampleModalAdapter extends TypeAdapter<SampleModal> {
@override
final int typeId = 1;
@override
SampleModal read(BinaryReader reader) {
final numOfFields = reader.readByte();
final fields = <int, dynamic>{
for (int i = 0; i < numOfFields; i++) reader.readByte(): reader.read(),
};
return SampleModal(
id: fields[0] as String,
title: fields[1] as String,
dateTime: fields[2] as Timestamp,
serverDateTime: fields[3] as FieldValue,
);
}
@override
void write(BinaryWriter writer, SampleModal obj) {
writer
..writeByte(4)
..writeByte(0)
..write(obj.id)
..writeByte(1)
..write(obj.title)
..writeByte(2)
..write(obj.dateTime)
..writeByte(3)
..write(obj.serverDateTime);
}
@override
int get hashCode => typeId.hashCode;
@override
bool operator ==(Object other) =>
identical(this, other) ||
other is SampleModalAdapter &&
runtimeType == other.runtimeType &&
typeId == other.typeId;
}