Hive Error unknown type TimeStamp . did you forget to register an adapter. How to generate TypeAdapter for object type used in external Packages?

2,321

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);
      }
    }
Share:
2,321
Srinath
Author by

Srinath

Updated on December 18, 2022

Comments

  • Srinath
    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
    Admin about 2 years
    Your 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.