Migration in Hive 2.0.4
- Dominant language
- Dart
- Stars
- 4.4k
- Forks
- 449
- PR merge metrics
- No merged PRs in 30d
Description
**Question**
How is a migration performed properly?
**Code sample**
Let's say we have the following model:
```dart
@HiveType(typeId: 1)
class DailyChunk extends HiveObject {
DailyChunk({
required this.mood,
required this.date,
});
@HiveField(0)
double mood;
@HiveField(1)
DateTime date;
}
```
And would like to update it to the following:
```dart
@HiveType(typeId: 1)
class DailyChunk extends HiveObject {
DailyChunk({
required this.mood,
required this.date,
required this.energy,
});
@HiveField(0)
double mood;
@HiveField(1)
DateTime date;
@HiveField(2)
double energy;
}
```
How would this be done properly without losing the data or getting null errors.
I read this documentation for Hive 0.1.0: [Migration](https://pub.dev/packages/hive/versions/0.1.0#migration)
However, I couldn't find anything similar for Hive 2
Updating that model leads to the following error:
```
Unhandled Exception: type 'Null' is not a subtype of type 'double' in type cast
E/flutter (14764): #0 DailyChunkAdapter.read (package:libitrack/model/entities/daily_chunk.g.dart:22:25)
E/flutter (14764): #1 BinaryReaderImpl.read (package:hive/src/binary/binary_reader_impl.dart:326:33)
E/flutter (14764): #2 BinaryReaderImpl.readFrame (package:hive/src/binary/binary_reader_impl.dart:274:26)
E/flutter (14764): #3 FrameHelper.framesFromBytes (package:hive/src/binary/frame_helper.dart:21:26)
E/flutter (14764): #4 FrameIoHelper.framesFromFile (package:hive/src/io/frame_io_helper.dart:42:12)
E/flutter (14764):
E/flutter (14764): #5 StorageBackendVm.initialize (package:hive/src/backend/vm/storage_backend_vm.dart:86:11)
E/flutter (14764):
E/flutter (14764): #6 HiveImpl._openBox (package:hive/src/hive_impl.dart:116:9)
E/flutter (14764):
E/flutter (14764): #7 HiveImpl.openBox (package:hive/src/hive_impl.dart:145:12)
E/flutter (14764):
E/flutter (14764): #8 _AddDataScreenState._readData (package:libitrack/ui/add_data_screen.dart:100:15)
E/flutter (14764):
E/flutter (14764):
E/flutter (14764): [ERROR:flutter/lib/ui/ui_dart_state.cc(209)] Unhandled Exception: type 'Null' is not a subtype of type 'double' in type cast
E/flutter (14764): #0 DailyChunkAdapter.read (package:libitrack/model/entities/daily_chunk.g.dart:22:25)
E/flutter (14764): #1 BinaryReaderImpl.read (package:hive/src/binary/binary_reader_impl.dart:326:33)
E/flutter (14764): #2 BinaryReaderImpl.readFrame (package:hive/src/binary/binary_reader_impl.dart:274:26)
E/flutter (14764): #3 FrameHelper.framesFromBytes (package:hive/src/binary/frame_helper.dart:21:26)
E/flutter (14764): #4 FrameIoHelper.framesFromFile (package:hive/src/io/frame_io_helper.dart:42:12)
E/flutter (14764):
E/flutter (14764): #5 StorageBackendVm.initialize (package:hive/src/backend/vm/storage_backend_vm.dart:86:11)
E/flutter (14764):
E/flutter (14764): #6 HiveImpl._openBox (package:hive/src/hive_impl.dart:116:9)
E/flutter (14764):
E/flutter (14764): #7 HiveImpl.openBox (package:hive/src/hive_impl.dart:145:12)
E/flutter (14764):
E/flutter (14764): #8 _AddDataScreenState._readData (package:libitrack/ui/add_data_screen.dart:100:15)
E/flutter (14764):
E/flutter (14764):
```
**Version**
- Platform: Mac
- Flutter version: [e.g. 2.5.2]
- Hive version: [e.g. 2.0.4]
Contributor guide
No contributing guide indexed for this repository
Research direction
Start with the Hive 2 migration documentation and the generated DailyChunkAdapter.read shown in the report, then trace the box-opening path through HiveImpl.openBox and _AddDataScreenState._readData. Document how the added energy field should be handled while preserving existing records, and show how to avoid the reported null-to-double cast error.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- dart, flutter
- Domain
- database
- Issue type
- Documentation
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Stale
- Clarity
- Needs clarification
- Newbie friendliness
- 35/100