summaryrefslogtreecommitdiffstats
path: root/lib/data/models/radio_state.dart
blob: dd307d9e5db233a8c827d875311647afeba7008f (plain)
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
88
89
90
91
92
93
94
95
96
97
98
99
100
import 'dart:convert';

import 'package:flutter_ics_homescreen/export.dart';

@immutable
class RadioState {
  final int freqMin;
  final int freqMax;
  final int freqStep;
  final int freqCurrent;
  final bool playing;
  final bool scanning;
  const RadioState(
      {required this.freqMin,
      required this.freqMax,
      required this.freqStep,
      required this.freqCurrent,
      required this.playing,
      required this.scanning});

  const RadioState.initial()
      : freqMin = 8790000,
        freqMax = 1083000,
        freqStep = 20000,
        freqCurrent = 8790000,
        playing = false,
        scanning = false;

  RadioState copyWith(
      {int? freqMin,
      int? freqMax,
      int? freqStep,
      int? freqCurrent,
      bool? playing,
      bool? scanning}) {
    return RadioState(
      freqMin: freqMin ?? this.freqMin,
      freqMax: freqMax ?? this.freqMax,
      freqStep: freqStep ?? this.freqStep,
      freqCurrent: freqCurrent ?? this.freqCurrent,
      playing: playing ?? this.playing,
      scanning: scanning ?? this.scanning,
    );
  }

  Map<String, dynamic> toMap() {
    return {
      'freqMin': freqMin,
      'freqMax': freqMax,
      'freqStep': freqStep,
      'freqCurrent': freqCurrent,
      'playing': playing,
      'scanning': scanning,
    };
  }

  factory RadioState.fromMap(Map<String, dynamic> map) {
    return RadioState(
      freqMin: map['freqMin']?.toInt().toUnsigned() ?? 0,
      freqMax: map['freqMax']?.toInt().toUnsigned() ?? 0,
      freqStep: map['freqStep']?.toInt().toUnsigned() ?? 0,
      freqCurrent: map['freqCurrent']?.toInt().toUnsigned() ?? 0,
      playing: map['playing']?.toBool() ?? false,
      scanning: map['scanning']?.toBool() ?? false,
    );
  }

  String toJson() => json.encode(toMap());

  factory RadioState.fromJson(String source) =>
      RadioState.fromMap(json.decode(source));

  @override
  String toString() {
    return 'RadioState(freqMin: $freqMin, freqMax: $freqMax, freqStep: $freqStep, freqCurrent: $freqCurrent, playing: $playing, scanning: $scanning)';
  }

  @override
  bool operator ==(Object other) {
    if (identical(this, other)) return true;

    return other is RadioState &&
        other.freqMin == freqMin &&
        other.freqMax == freqMax &&
        other.freqStep == freqStep &&
        other.freqCurrent == freqCurrent &&
        other.playing == playing &&
        other.scanning == scanning;
  }

  @override
  int get hashCode {
    return freqMin.hashCode ^
        freqMax.hashCode ^
        freqStep.hashCode ^
        freqCurrent.hashCode ^
        playing.hashCode ^
        scanning.hashCode;
  }
}