From f722fa90140149ba45d8f5f4a9d601b6cea8b495 Mon Sep 17 00:00:00 2001 From: Rexios Date: Tue, 3 Sep 2024 10:57:28 -0400 Subject: [PATCH 01/11] Preparing for using constructor default values --- hive_generator/lib/src/builder.dart | 27 +++++++++++++------ hive_generator/lib/src/class_builder.dart | 4 +-- hive_generator/lib/src/enum_builder.dart | 2 +- .../lib/src/type_adapter_generator.dart | 9 +++++++ 4 files changed, 31 insertions(+), 11 deletions(-) diff --git a/hive_generator/lib/src/builder.dart b/hive_generator/lib/src/builder.dart index 01070180..9786c2d3 100644 --- a/hive_generator/lib/src/builder.dart +++ b/hive_generator/lib/src/builder.dart @@ -2,22 +2,33 @@ import 'package:analyzer/dart/constant/value.dart'; import 'package:analyzer/dart/element/element.dart'; import 'package:analyzer/dart/element/type.dart'; -/// TODO: Document this! +/// Metadata about a field in a class adapter class AdapterField { - /// TODO: Document this! + /// The index of the field + /// + /// Determines the order fields are read and written final int index; - /// TODO: Document this! + /// The name of the field final String name; - /// TODO: Document this! + /// The type of the field final DartType type; - /// TODO: Document this! - final DartObject? defaultValue; + /// A default value provided by the field annotation + final DartObject? annotationDefault; - /// TODO: Document this! - AdapterField(this.index, this.name, this.type, this.defaultValue); + /// A default value provided by the constructor + final String? constructorDefault; + + /// Constructor + AdapterField( + this.index, + this.name, + this.type, + this.annotationDefault, + this.constructorDefault, + ); } /// TODO: Document this! diff --git a/hive_generator/lib/src/class_builder.dart b/hive_generator/lib/src/class_builder.dart index 70f7048b..5cf7dbaf 100644 --- a/hive_generator/lib/src/class_builder.dart +++ b/hive_generator/lib/src/class_builder.dart @@ -72,7 +72,7 @@ class ClassBuilder extends Builder { _value( param.type, 'fields[${field.index}]', - field.defaultValue, + field.annotationDefault, ), ); code.writeln(','); @@ -90,7 +90,7 @@ class ClassBuilder extends Builder { _value( field.type, 'fields[${field.index}]', - field.defaultValue, + field.annotationDefault, ), ); } diff --git a/hive_generator/lib/src/enum_builder.dart b/hive_generator/lib/src/enum_builder.dart index 820e8066..3f9d2ec8 100644 --- a/hive_generator/lib/src/enum_builder.dart +++ b/hive_generator/lib/src/enum_builder.dart @@ -20,7 +20,7 @@ class EnumBuilder extends Builder { } final defaultField = getters.firstWhere( - (it) => it.defaultValue?.toBoolValue() == true, + (it) => it.annotationDefault?.toBoolValue() == true, orElse: () => getters.first, ); code.writeln(''' diff --git a/hive_generator/lib/src/type_adapter_generator.dart b/hive_generator/lib/src/type_adapter_generator.dart index 0cdc42f8..570c69f4 100644 --- a/hive_generator/lib/src/type_adapter_generator.dart +++ b/hive_generator/lib/src/type_adapter_generator.dart @@ -1,3 +1,4 @@ +import 'package:analyzer/dart/constant/value.dart'; import 'package:analyzer/dart/element/element.dart'; import 'package:build/build.dart'; import 'package:hive_ce/hive.dart'; @@ -87,6 +88,12 @@ class TypeAdapterGenerator extends GeneratorForAnnotation { ) { final accessorNames = getAllAccessorNames(cls); + final constructor = cls.constructors.firstWhere((e) => e.name.isEmpty); + final parameterDefaults = { + for (final param in constructor.parameters) + param.name: param.defaultValueCode, + }; + final getters = []; final setters = []; for (final name in accessorNames) { @@ -102,6 +109,7 @@ class TypeAdapterGenerator extends GeneratorForAnnotation { field.name, field.type, getterAnn.defaultValue, + parameterDefaults[field.name], ), ); } @@ -120,6 +128,7 @@ class TypeAdapterGenerator extends GeneratorForAnnotation { field.name, field.type, setterAnn.defaultValue, + parameterDefaults[field.name], ), ); } From dbe4a0b3d9ad8544be16876fb7bd938558aa6332 Mon Sep 17 00:00:00 2001 From: Rexios Date: Tue, 3 Sep 2024 11:14:59 -0400 Subject: [PATCH 02/11] Write the code --- hive_generator/lib/src/class_builder.dart | 38 ++++++------- .../lib/src/type_adapter_generator.dart | 54 ++++++++----------- 2 files changed, 41 insertions(+), 51 deletions(-) diff --git a/hive_generator/lib/src/class_builder.dart b/hive_generator/lib/src/class_builder.dart index 5cf7dbaf..ed0413c2 100644 --- a/hive_generator/lib/src/class_builder.dart +++ b/hive_generator/lib/src/class_builder.dart @@ -1,6 +1,5 @@ import 'dart:typed_data'; -import 'package:analyzer/dart/constant/value.dart'; import 'package:analyzer/dart/element/nullability_suffix.dart'; import 'package:analyzer/dart/element/type.dart'; import 'package:hive_ce/hive.dart'; @@ -68,13 +67,7 @@ class ClassBuilder extends Builder { if (param.isNamed) { code.write('${param.name}: '); } - code.write( - _value( - param.type, - 'fields[${field.index}]', - field.annotationDefault, - ), - ); + code.write(_value(param.type, field)); code.writeln(','); fields.remove(field); } @@ -86,13 +79,7 @@ class ClassBuilder extends Builder { // as initializing formals. We do so using cascades. for (final field in fields) { code.write('..${field.name} = '); - code.writeln( - _value( - field.type, - 'fields[${field.index}]', - field.annotationDefault, - ), - ); + code.writeln(_value(field.type, field)); } code.writeln(';'); @@ -100,10 +87,25 @@ class ClassBuilder extends Builder { return code.toString(); } - String _value(DartType type, String variable, DartObject? defaultValue) { + String _value(DartType type, AdapterField field) { + final variable = 'fields[${field.index}]'; final value = _cast(type, variable); - if (defaultValue?.isNull != false) return value; - return '$variable == null ? ${constantToString(defaultValue!)} : $value'; + + final annotationDefaultIsNull = field.annotationDefault?.isNull ?? true; + final constructorDefaultIsNull = field.constructorDefault == null; + + final String? defaultValue; + if (!annotationDefaultIsNull) { + defaultValue = constantToString(field.annotationDefault); + } else if (!constructorDefaultIsNull) { + defaultValue = field.constructorDefault; + } else { + defaultValue = null; + } + + if (defaultValue == null) return value; + + return '$variable == null ? $defaultValue : $value'; } String _cast(DartType type, String variable) { diff --git a/hive_generator/lib/src/type_adapter_generator.dart b/hive_generator/lib/src/type_adapter_generator.dart index 570c69f4..9de6dcec 100644 --- a/hive_generator/lib/src/type_adapter_generator.dart +++ b/hive_generator/lib/src/type_adapter_generator.dart @@ -1,4 +1,3 @@ -import 'package:analyzer/dart/constant/value.dart'; import 'package:analyzer/dart/element/element.dart'; import 'package:build/build.dart'; import 'package:hive_ce/hive.dart'; @@ -94,45 +93,34 @@ class TypeAdapterGenerator extends GeneratorForAnnotation { param.name: param.defaultValueCode, }; + AdapterField? accessorToField(PropertyAccessorElement? element) { + if (element == null) return null; + + final annotation = + getHiveFieldAnn(element.variable2) ?? getHiveFieldAnn(element); + if (annotation == null) return null; + + final field = element.variable2!; + return AdapterField( + annotation.index, + field.name, + field.type, + annotation.defaultValue, + parameterDefaults[field.name], + ); + } + final getters = []; final setters = []; for (final name in accessorNames) { final getter = cls.augmented.lookUpGetter(name: name, library: library); - if (getter != null) { - final getterAnn = - getHiveFieldAnn(getter.variable2) ?? getHiveFieldAnn(getter); - if (getterAnn != null) { - final field = getter.variable2!; - getters.add( - AdapterField( - getterAnn.index, - field.name, - field.type, - getterAnn.defaultValue, - parameterDefaults[field.name], - ), - ); - } - } + final getterField = accessorToField(getter); + if (getterField != null) getters.add(getterField); final setter = cls.augmented.lookUpSetter(name: '$name=', library: library); - if (setter != null) { - final setterAnn = - getHiveFieldAnn(setter.variable2) ?? getHiveFieldAnn(setter); - if (setterAnn != null) { - final field = setter.variable2!; - setters.add( - AdapterField( - setterAnn.index, - field.name, - field.type, - setterAnn.defaultValue, - parameterDefaults[field.name], - ), - ); - } - } + final setterField = accessorToField(setter); + if (setterField != null) setters.add(setterField); } return [getters, setters]; From e6158345ea74bce2d4a5d81716e0e35d97b95fa7 Mon Sep 17 00:00:00 2001 From: Rexios Date: Tue, 3 Sep 2024 11:19:20 -0400 Subject: [PATCH 03/11] Do not generate the hive registrar if there are no adapters --- hive_generator/lib/src/registrar_generator.dart | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/hive_generator/lib/src/registrar_generator.dart b/hive_generator/lib/src/registrar_generator.dart index af171fb5..96b57e07 100644 --- a/hive_generator/lib/src/registrar_generator.dart +++ b/hive_generator/lib/src/registrar_generator.dart @@ -14,8 +14,6 @@ class RegistrarBuilder implements Builder { @override Future build(BuildStep buildStep) async { - final buffer = StringBuffer("import 'package:hive_ce/hive.dart';\n"); - final uris = []; final adapters = []; await for (final input @@ -26,6 +24,11 @@ class RegistrarBuilder implements Builder { adapters.addAll((data['adapters'] as List).cast()); } + // Do not create the registrar if there are no adapters + if (adapters.isEmpty) return; + + final buffer = StringBuffer("import 'package:hive_ce/hive.dart';\n"); + for (final uri in uris) { buffer.writeln("import '$uri';"); } From bf968844ced76bf3821cc5e237b4a9cfd2c08903 Mon Sep 17 00:00:00 2001 From: Rexios Date: Tue, 3 Sep 2024 11:20:24 -0400 Subject: [PATCH 04/11] Changelog --- hive_generator/CHANGELOG.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/hive_generator/CHANGELOG.md b/hive_generator/CHANGELOG.md index a3584386..ccf9f06f 100644 --- a/hive_generator/CHANGELOG.md +++ b/hive_generator/CHANGELOG.md @@ -1,3 +1,8 @@ +## NEXT + +- Supports constructor parameter default values +- No longer generates the `HiveRegistrar` if there are no adapters + ## 1.4.0 - Adds a generator to create a `HiveRegistrar` extension that allows registration of all generated `TypeAdapters` in one call From 3d2d5c98f087ab7e2ff7a9862b5d604c162f8f46 Mon Sep 17 00:00:00 2001 From: Rexios Date: Tue, 3 Sep 2024 11:23:48 -0400 Subject: [PATCH 05/11] Documentation --- hive/lib/src/annotations/hive_field.dart | 2 ++ 1 file changed, 2 insertions(+) diff --git a/hive/lib/src/annotations/hive_field.dart b/hive/lib/src/annotations/hive_field.dart index ba42f505..22f5e5c4 100644 --- a/hive/lib/src/annotations/hive_field.dart +++ b/hive/lib/src/annotations/hive_field.dart @@ -12,6 +12,8 @@ class HiveField { final int index; /// The default value of this field for class hive types. + /// + /// This value takes precedence over constructor parameter default values. /// /// In enum hive types set `true` to use this enum value as default value /// instead of null in null-safety. From ba453a88e940c7b4a2b4c9ad0e9c336ec45a5e86 Mon Sep 17 00:00:00 2001 From: Rexios Date: Tue, 3 Sep 2024 11:28:57 -0400 Subject: [PATCH 06/11] Add an example for constructor defaults --- .../example/lib/hive_registrar.g.dart | 1 + hive_generator/example/lib/types.dart | 14 +++++++ hive_generator/example/lib/types.g.dart | 40 +++++++++++++++++++ 3 files changed, 55 insertions(+) diff --git a/hive_generator/example/lib/hive_registrar.g.dart b/hive_generator/example/lib/hive_registrar.g.dart index 8726bdf7..7700d009 100644 --- a/hive_generator/example/lib/hive_registrar.g.dart +++ b/hive_generator/example/lib/hive_registrar.g.dart @@ -7,6 +7,7 @@ extension HiveRegistrar on HiveInterface { registerAdapter(Class2Adapter()); registerAdapter(EmptyClassAdapter()); registerAdapter(IterableClassAdapter()); + registerAdapter(ConstructorDefaultsAdapter()); registerAdapter(Enum1Adapter()); } } diff --git a/hive_generator/example/lib/types.dart b/hive_generator/example/lib/types.dart index 72eb8742..29ea1eba 100644 --- a/hive_generator/example/lib/types.dart +++ b/hive_generator/example/lib/types.dart @@ -78,3 +78,17 @@ class IterableClass { @HiveField(3) final Set> nestedSet; } + +@HiveType(typeId: 6) +class ConstructorDefaults { + ConstructorDefaults({this.a = 42, this.b = '42', this.c = true}); + + @HiveField(0) + final int a; + + @HiveField(1, defaultValue: '6 * 7') + final String b; + + @HiveField(2) + final bool c; +} diff --git a/hive_generator/example/lib/types.g.dart b/hive_generator/example/lib/types.g.dart index fb559bc3..df478aeb 100644 --- a/hive_generator/example/lib/types.g.dart +++ b/hive_generator/example/lib/types.g.dart @@ -165,6 +165,46 @@ class IterableClassAdapter extends TypeAdapter { typeId == other.typeId; } +class ConstructorDefaultsAdapter extends TypeAdapter { + @override + final int typeId = 6; + + @override + ConstructorDefaults read(BinaryReader reader) { + final numOfFields = reader.readByte(); + final fields = { + for (int i = 0; i < numOfFields; i++) reader.readByte(): reader.read(), + }; + return ConstructorDefaults( + a: fields[0] == null ? 42 : (fields[0] as num).toInt(), + b: fields[1] == null ? '6 * 7' : fields[1] as String, + c: fields[2] == null ? true : fields[2] as bool, + ); + } + + @override + void write(BinaryWriter writer, ConstructorDefaults obj) { + writer + ..writeByte(3) + ..writeByte(0) + ..write(obj.a) + ..writeByte(1) + ..write(obj.b) + ..writeByte(2) + ..write(obj.c); + } + + @override + int get hashCode => typeId.hashCode; + + @override + bool operator ==(Object other) => + identical(this, other) || + other is ConstructorDefaultsAdapter && + runtimeType == other.runtimeType && + typeId == other.typeId; +} + class Enum1Adapter extends TypeAdapter { @override final int typeId = 3; From 48919da263931a037e393359ed45852cd76faa06 Mon Sep 17 00:00:00 2001 From: Rexios Date: Tue, 3 Sep 2024 11:31:34 -0400 Subject: [PATCH 07/11] Changelog --- hive/CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/hive/CHANGELOG.md b/hive/CHANGELOG.md index 19b36dec..2eaaec25 100644 --- a/hive/CHANGELOG.md +++ b/hive/CHANGELOG.md @@ -1,3 +1,7 @@ +## NEXT + +- Documentation updates for `HiveField` in support of `hive_ce_generator` changes + ## 2.5.0 - Adds `Target` annotations to `HiveField` and `HiveType` to prevent invalid usage From 8bd0fab9126f5925cdfa9a2a969626502e00d595 Mon Sep 17 00:00:00 2001 From: Rexios Date: Tue, 3 Sep 2024 11:48:26 -0400 Subject: [PATCH 08/11] Preparing for release --- hive/CHANGELOG.md | 2 +- hive/lib/src/annotations/hive_field.dart | 2 +- hive/pubspec.yaml | 2 +- hive_generator/CHANGELOG.md | 2 +- hive_generator/pubspec.yaml | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/hive/CHANGELOG.md b/hive/CHANGELOG.md index 2eaaec25..624f123b 100644 --- a/hive/CHANGELOG.md +++ b/hive/CHANGELOG.md @@ -1,4 +1,4 @@ -## NEXT +## 2.5.0+1 - Documentation updates for `HiveField` in support of `hive_ce_generator` changes diff --git a/hive/lib/src/annotations/hive_field.dart b/hive/lib/src/annotations/hive_field.dart index 22f5e5c4..a01f1226 100644 --- a/hive/lib/src/annotations/hive_field.dart +++ b/hive/lib/src/annotations/hive_field.dart @@ -12,7 +12,7 @@ class HiveField { final int index; /// The default value of this field for class hive types. - /// + /// /// This value takes precedence over constructor parameter default values. /// /// In enum hive types set `true` to use this enum value as default value diff --git a/hive/pubspec.yaml b/hive/pubspec.yaml index 5e188028..7ce5311a 100644 --- a/hive/pubspec.yaml +++ b/hive/pubspec.yaml @@ -1,6 +1,6 @@ name: hive_ce description: Hive Community Edition - A spiritual continuation of Hive v2 -version: 2.5.0 +version: 2.5.0+1 homepage: https://github.com/IO-Design-Team/hive_ce/tree/main/hive documentation: https://docs.hivedb.dev/ diff --git a/hive_generator/CHANGELOG.md b/hive_generator/CHANGELOG.md index ccf9f06f..f6db14fb 100644 --- a/hive_generator/CHANGELOG.md +++ b/hive_generator/CHANGELOG.md @@ -1,4 +1,4 @@ -## NEXT +## 1.5.0 - Supports constructor parameter default values - No longer generates the `HiveRegistrar` if there are no adapters diff --git a/hive_generator/pubspec.yaml b/hive_generator/pubspec.yaml index 44d480c6..2c89ba6f 100644 --- a/hive_generator/pubspec.yaml +++ b/hive_generator/pubspec.yaml @@ -1,6 +1,6 @@ name: hive_ce_generator description: Extension for Hive. Automatically generates TypeAdapters to store any class. -version: 1.4.0 +version: 1.5.0 homepage: https://github.com/IO-Design-Team/hive_ce/tree/main/hive_generator documentation: https://docs.hivedb.dev/ From fbe37e583c9178253dbdaa2401cde93ba492ae09 Mon Sep 17 00:00:00 2001 From: Rexios Date: Tue, 3 Sep 2024 12:12:57 -0400 Subject: [PATCH 09/11] Fix bad migration of `getDisplayString` --- hive_generator/CHANGELOG.md | 2 + .../example/lib/hive_registrar.g.dart | 1 + hive_generator/example/lib/types.dart | 14 +++++++ hive_generator/example/lib/types.g.dart | 40 +++++++++++++++++++ hive_generator/lib/src/class_builder.dart | 13 ++---- 5 files changed, 61 insertions(+), 9 deletions(-) diff --git a/hive_generator/CHANGELOG.md b/hive_generator/CHANGELOG.md index f6db14fb..a5c24646 100644 --- a/hive_generator/CHANGELOG.md +++ b/hive_generator/CHANGELOG.md @@ -2,6 +2,8 @@ - Supports constructor parameter default values - No longer generates the `HiveRegistrar` if there are no adapters +- Removes unnecessary print statement in `HiveRegistrar` generator +- Bumps `analyzer` to `^6.5.0` to deal with deprecations ## 1.4.0 diff --git a/hive_generator/example/lib/hive_registrar.g.dart b/hive_generator/example/lib/hive_registrar.g.dart index 7700d009..29472572 100644 --- a/hive_generator/example/lib/hive_registrar.g.dart +++ b/hive_generator/example/lib/hive_registrar.g.dart @@ -8,6 +8,7 @@ extension HiveRegistrar on HiveInterface { registerAdapter(EmptyClassAdapter()); registerAdapter(IterableClassAdapter()); registerAdapter(ConstructorDefaultsAdapter()); + registerAdapter(NullableTypesAdapter()); registerAdapter(Enum1Adapter()); } } diff --git a/hive_generator/example/lib/types.dart b/hive_generator/example/lib/types.dart index 29ea1eba..7d27d69d 100644 --- a/hive_generator/example/lib/types.dart +++ b/hive_generator/example/lib/types.dart @@ -92,3 +92,17 @@ class ConstructorDefaults { @HiveField(2) final bool c; } + +@HiveType(typeId: 7) +class NullableTypes { + NullableTypes({this.a, this.b, this.c}); + + @HiveField(0) + final int? a; + + @HiveField(1) + final String? b; + + @HiveField(2) + final bool? c; +} diff --git a/hive_generator/example/lib/types.g.dart b/hive_generator/example/lib/types.g.dart index df478aeb..47e6e896 100644 --- a/hive_generator/example/lib/types.g.dart +++ b/hive_generator/example/lib/types.g.dart @@ -205,6 +205,46 @@ class ConstructorDefaultsAdapter extends TypeAdapter { typeId == other.typeId; } +class NullableTypesAdapter extends TypeAdapter { + @override + final int typeId = 7; + + @override + NullableTypes read(BinaryReader reader) { + final numOfFields = reader.readByte(); + final fields = { + for (int i = 0; i < numOfFields; i++) reader.readByte(): reader.read(), + }; + return NullableTypes( + a: (fields[0] as num?)?.toInt(), + b: fields[1] as String?, + c: fields[2] as bool?, + ); + } + + @override + void write(BinaryWriter writer, NullableTypes obj) { + writer + ..writeByte(3) + ..writeByte(0) + ..write(obj.a) + ..writeByte(1) + ..write(obj.b) + ..writeByte(2) + ..write(obj.c); + } + + @override + int get hashCode => typeId.hashCode; + + @override + bool operator ==(Object other) => + identical(this, other) || + other is NullableTypesAdapter && + runtimeType == other.runtimeType && + typeId == other.typeId; +} + class Enum1Adapter extends TypeAdapter { @override final int typeId = 3; diff --git a/hive_generator/lib/src/class_builder.dart b/hive_generator/lib/src/class_builder.dart index ed0413c2..0878ff53 100644 --- a/hive_generator/lib/src/class_builder.dart +++ b/hive_generator/lib/src/class_builder.dart @@ -123,7 +123,7 @@ class ClassBuilder extends Builder { } else if (type.isDartCoreDouble) { return '($variable as num$suffix)$suffix.toDouble()'; } else { - return '$variable as ${_displayString(type)}'; + return '$variable as ${type.getDisplayString()}'; } } @@ -154,7 +154,7 @@ class ClassBuilder extends Builder { return '$suffix.map((e) => ${_cast(arg, 'e')})$cast'; } else { - return '$suffix.cast<${_displayString(arg)}>()'; + return '$suffix.cast<${arg.getDisplayString()}>()'; } } @@ -167,8 +167,8 @@ class ClassBuilder extends Builder { return '$suffix.map((dynamic k, dynamic v)=>' 'MapEntry(${_cast(arg1, 'k')},${_cast(arg2, 'v')}))'; } else { - return '$suffix.cast<${_displayString(arg1)}, ' - '${_displayString(arg2)}>()'; + return '$suffix.cast<${arg1.getDisplayString()}, ' + '${arg2.getDisplayString()}>()'; } } @@ -222,8 +222,3 @@ String _suffixFromType(DartType type) { } return ''; } - -String _displayString(DartType e) { - final suffix = _suffixFromType(e); - return '${e.getDisplayString()}$suffix'; -} From e826d6c91a6694b232885bcad7b2c58c56331be0 Mon Sep 17 00:00:00 2001 From: Rexios Date: Tue, 3 Sep 2024 12:16:28 -0400 Subject: [PATCH 10/11] Improve `_suffixFromType` function --- hive_generator/lib/src/class_builder.dart | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/hive_generator/lib/src/class_builder.dart b/hive_generator/lib/src/class_builder.dart index 0878ff53..7c3d082c 100644 --- a/hive_generator/lib/src/class_builder.dart +++ b/hive_generator/lib/src/class_builder.dart @@ -214,11 +214,8 @@ String _accessorSuffixFromType(DartType type) { /// Suffix to use when casting a value to [type]. /// $variable as $type$suffix String _suffixFromType(DartType type) { - if (type.nullabilitySuffix == NullabilitySuffix.star) { - return ''; - } - if (type.nullabilitySuffix == NullabilitySuffix.question) { - return '?'; - } - return ''; + return switch (type.nullabilitySuffix) { + NullabilitySuffix.question => '?', + _ => '', + }; } From 45f96ffada03a9a571fc6d42568cd83cd9739fc6 Mon Sep 17 00:00:00 2001 From: Rexios Date: Tue, 3 Sep 2024 12:38:47 -0400 Subject: [PATCH 11/11] Add initializer list example --- hive_generator/example/lib/types.dart | 10 +++++++++- hive_generator/example/lib/types.g.dart | 7 +++++-- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/hive_generator/example/lib/types.dart b/hive_generator/example/lib/types.dart index 7d27d69d..a1c65b65 100644 --- a/hive_generator/example/lib/types.dart +++ b/hive_generator/example/lib/types.dart @@ -81,7 +81,12 @@ class IterableClass { @HiveType(typeId: 6) class ConstructorDefaults { - ConstructorDefaults({this.a = 42, this.b = '42', this.c = true}); + ConstructorDefaults({ + this.a = 42, + this.b = '42', + this.c = true, + DateTime? d, + }) : d = d ?? DateTime.now(); @HiveField(0) final int a; @@ -91,6 +96,9 @@ class ConstructorDefaults { @HiveField(2) final bool c; + + @HiveField(3) + final DateTime d; } @HiveType(typeId: 7) diff --git a/hive_generator/example/lib/types.g.dart b/hive_generator/example/lib/types.g.dart index 47e6e896..2d4bf6cc 100644 --- a/hive_generator/example/lib/types.g.dart +++ b/hive_generator/example/lib/types.g.dart @@ -179,19 +179,22 @@ class ConstructorDefaultsAdapter extends TypeAdapter { a: fields[0] == null ? 42 : (fields[0] as num).toInt(), b: fields[1] == null ? '6 * 7' : fields[1] as String, c: fields[2] == null ? true : fields[2] as bool, + d: fields[3] as DateTime?, ); } @override void write(BinaryWriter writer, ConstructorDefaults obj) { writer - ..writeByte(3) + ..writeByte(4) ..writeByte(0) ..write(obj.a) ..writeByte(1) ..write(obj.b) ..writeByte(2) - ..write(obj.c); + ..write(obj.c) + ..writeByte(3) + ..write(obj.d); } @override