Hive Error unknown type TimeStamp . did you forget to register an adapter. How to generate TypeAdapter for object type used in external Packages?
Solution 1
Based on hive docs, 'hive only supported primitives, lists and maps but also any Dart object you like'. So in your case try to change the saving way to hive like convert it to int miliseconds first.
Solution 2
For anyone coming back here, write this within a file with '.g.dart' extension:
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:hive/hive.dart';
class TimestampAdapter extends TypeAdapter<Timestamp> {
@override
final typeId = 16;
@override
Timestamp read(BinaryReader reader) {
final micros = reader.readInt();
return Timestamp.fromMicrosecondsSinceEpoch(micros);
}
@override
void write(BinaryWriter writer, Timestamp obj) {
writer.writeInt(obj.microsecondsSinceEpoch);
}
}
Srinath
Updated on December 18, 2022Comments
-
Srinath over 1 year
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; }
-
Admin about 2 yearsYour answer could be improved with additional supporting information. Please edit to add further details, such as citations or documentation, so that others can confirm that your answer is correct. You can find more information on how to write good answers in the help center.