dev
dart 37 lines 739 Bytes
Raw
1 import 'dart:async';
2
3 import 'package:cake_wallet/utils/mobx.dart';
4 import 'package:hive/hive.dart';
5 import 'package:cw_core/keyable.dart';
6
7 abstract class Record<T extends HiveObject> with Keyable {
8 Record(this._source, this.original) {
9 key = original.key;
10 _listener?.cancel();
11 _listener = _source.watch(key: original.key).listen((event) {
12 if (!event.deleted) {
13 fromBind(event.value as T);
14 }
15 });
16
17 fromBind(original);
18 toBind(original);
19 }
20
21 dynamic key;
22
23 @override
24 dynamic get keyIndex => key;
25
26 final T original;
27
28 final Box<T> _source;
29
30 StreamSubscription<BoxEvent>? _listener;
31
32 void fromBind(T original);
33
34 void toBind(T original);
35
36 Future<void> save() => original.save();
37 }