isar / isar/hive

Migration in Hive 2.0.4

Open
#825 4 comments 1 reaction 0 assignees View on GitHub
question
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

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.