hive icon indicating copy to clipboard operation
hive copied to clipboard

Generator not building file for Freezed class

Open aardrop opened this issue 2 years ago • 4 comments

Steps to Reproduce We use Hive for our settings and we have it attached to a Freezed class as well. We are on the most recent version of both platforms. The freezer generator file builds without fail but the hive file does not. Actually, it only will build if I add or remove the 'abstract' keyword. Once I change the 'abstract' (either adding or removing it) it will build the generator file BUT the next time the generator runs it will remove the file again and I will have to change it again to trigger a rebuild.
``

Code sample

import 'package:freezed_annotation/freezed_annotation.dart';
import 'package:hive/hive.dart';
import 'package:hive_flutter/hive_flutter.dart';

import 'package:../domain/settings/settings.dart';

part 'settings_dto.freezed.dart';
part 'settings_dto.g.dart';

@freezed
class SettingsDto with _$SettingsDto {
  @HiveType(typeId: 1, adapterName: 'SettingsDtoAdapter')
  const SettingsDto._();
  @HiveType(typeId: 0)
  const factory SettingsDto({
    @HiveField(0) final String? id,
    @HiveField(1) final String? units,
  }) = _SettingsDto;

  factory SettingsDto.fromDomain(Settings settings) {
    return SettingsDto(
      id: settings.id,
      units: settings.units.name,
    );
  }

  Units stringToEnumUnits(String unitsStr) {
    Units u =
        Units.values.firstWhere((e) => e.toString() == 'Units.' + unitsStr);
    return u;
  }

  Settings toDomain() => Settings(
        id: id,
        units: units == null ? Units.imperial : stringToEnumUnits(units!),
      );
}

Version

  • Flutter version: version 2.7<3.0 (haven't tested it on 3 yet)
  • Hive version: hive: ^2.2.1 hive_flutter: ^1.1.0 hive_generator: ^1.1.3

aardrop avatar Jun 01 '22 22:06 aardrop

same problem :(

Nightwelf avatar Jun 04 '22 11:06 Nightwelf

Hi. I had the same issues recently, and managed to solve it by reordering the builder sequence so hive_generator will run after freezed but before json_serializable.

# build.yaml
global_options:
  freezed:freezed:
    runs_before:
      - hive_generator:hive_generator
  hive_generator:hive_generator:
    runs_before:
      - json_serializable:json_serializable

though I'm not sure if it'll bring another issues to the table or not.

nullxception avatar Aug 24 '22 00:08 nullxception

This should be in the readme

Rexios80 avatar May 12 '23 15:05 Rexios80

Using freezed 2.4.3 with Hive now generates ObjectImplAdapter instead of ObjectAdapter in the .g.dart file and breaks existing imports.

Breaking change in Freezed 2.4.3

This is supposed to be intended behavior, and hive is not supposed to be using the internal Impl class as per Remi. Importing the new ObjectImplAdapter still works though, for now.

alguintu avatar Sep 30 '23 15:09 alguintu