-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathfire_danger.dart
More file actions
47 lines (41 loc) · 1.72 KB
/
Copy pathfire_danger.dart
File metadata and controls
47 lines (41 loc) · 1.72 KB
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
import 'package:flutter/material.dart' show Colors, MaterialColor;
import 'package:kb4yg/extensions/string_extension.dart';
enum Danger { unknown, low, moderate, high, extreme }
/// Risk of fires for a region. Designated by Oregon Department of Forestry (ODF).
class FireDanger {
/// Datetime of update in milliseconds since epoch.
final int lastUpdated;
/// ODF fire danger level (low, moderate, high, extreme).
final String levelStr;
/// Enum of levelStr (unknown, low, moderate, high, extreme).
late final Danger level = levelFromStr(levelStr);
/// Color associated with danger level.
late final MaterialColor color = matchFireDangerColor(level);
/// Construct FireDanger object from JSON file.
/// Requires fields LastUpdate (int in epoch form) and Level (string).
FireDanger.fromJson(Map<String, dynamic> json)
: lastUpdated = json['LastUpdate'],
levelStr = json['Level'];
@override
String toString() => levelStr.capitalize();
}
/// Get Danger enum value from string representation (e.g., 'low' -> Danger.low).
Danger levelFromStr(String levelStr) {
switch (levelStr.toLowerCase()) {
case 'low': return Danger.low;
case 'moderate': return Danger.moderate;
case 'high': return Danger.high;
case 'extreme': return Danger.extreme;
default: return Danger.unknown;
}
}
/// Get color associated with danger level (e.g., Danger.low -> Colors.green).
MaterialColor matchFireDangerColor(Danger? danger) {
switch (danger) {
case (Danger.low): return Colors.green;
case (Danger.moderate): return Colors.blue;
case (Danger.high): return Colors.amber;
case (Danger.extreme): return Colors.red;
default: return Colors.grey;
}
}