-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathhazard_update.dart
87 lines (74 loc) · 2.54 KB
/
hazard_update.dart
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
import 'dart:collection';
import 'package:collection/collection.dart';
import 'package:drift/drift.dart' as drift;
import 'package:flutter/foundation.dart';
import 'package:forest_park_reports/consts.dart';
import 'package:forest_park_reports/database/database.dart';
import 'package:freezed_annotation/freezed_annotation.dart';
part 'hazard_update.g.dart';
part 'hazard_update.freezed.dart';
class HazardUpdateList extends ListBase<HazardUpdateModel> {
final List<HazardUpdateModel> l;
HazardUpdateList(this.l);
@override
set length(int newLength) { l.length = newLength; }
@override
int get length => l.length;
@override
HazardUpdateModel operator [](int index) => l[index];
@override
void operator []=(int index, HazardUpdateModel value) { l[index] = value; }
String? get lastImage => lastWhereOrNull((e) => e.image != null)?.image;
String? get lastBlurHash => lastWhereOrNull((e) => e.blurHash != null)?.blurHash;
factory HazardUpdateList.fromJson(dynamic json) => HazardUpdateList([
for (final update in json)
HazardUpdateModel.fromJson(update),
]);
List<Map<String, dynamic>> toJson() => [
for (final update in this)
update.toJson(),
];
}
@freezed
class HazardUpdateModel with _$HazardUpdateModel implements drift.Insertable<HazardUpdateModel> {
const HazardUpdateModel._();
const factory HazardUpdateModel({
required String uuid,
required String hazard,
required DateTime time,
required bool active,
@Default(false) bool offline,
String? blurHash,
String? image,
}) = _HazardUpdateModel;
factory HazardUpdateModel.create({
required String hazard,
required bool active,
String? uuid,
String? blurHash,
String? image,
}) => HazardUpdateModel(
uuid: uuid ?? kUuidGen.v1(),
hazard: hazard,
time: DateTime.now().toUtc(),
active: active,
offline: true,
blurHash: blurHash,
image: image,
);
/// Maps a [HazardUpdateModel] to a database [HazardUpdatesTable] row.
@override
Map<String, drift.Expression<Object>> toColumns(bool nullToAbsent) =>
HazardUpdatesTableCompanion(
uuid: drift.Value(uuid),
hazard: drift.Value(hazard),
time: drift.Value(time),
active: drift.Value(active),
offline: drift.Value(offline),
blurHash: drift.Value(blurHash),
image: drift.Value(image),
).toColumns(nullToAbsent);
factory HazardUpdateModel.fromJson(Map<String, dynamic> json) =>
_$HazardUpdateModelFromJson(json);
String timeString() => kDisplayDateFormat.format(time.toLocal());
}