Skip to content

Commit edefe4f

Browse files
authored
Merge pull request #1 from Kamoool/SettingsRepositorySingleton
Settings repository singleton
2 parents c5a73c9 + 8401291 commit edefe4f

7 files changed

Lines changed: 154 additions & 176 deletions

File tree

lib/model/settings_repository.dart

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import 'package:flutter/material.dart';
33
import '../model/setting.dart';
44

55
class SettingsRepository {
6+
static final SettingsRepository instance = SettingsRepository.internal();
67
late final List<Setting> settingsList;
78
late final List<Setting> readingsList;
89

@@ -82,7 +83,11 @@ class SettingsRepository {
8283
final Setting postDelayQS = Setting(SettingType.PostDelayQS, '500');
8384
final Setting postDelayDS = Setting(SettingType.PostDelayDS, '500');
8485

85-
SettingsRepository() {
86+
factory SettingsRepository(){
87+
return instance;
88+
}
89+
90+
SettingsRepository.internal() {
8691
// settingsMap = {
8792
// SettingType.RPM: Setting(SettingType.RPM, '1234'),
8893
// SettingType.Sensor: Setting(SettingType.Sensor, '120'),

lib/screens/settings_screen.dart

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -212,21 +212,17 @@ class _SettingsScreenState extends State<SettingsScreen> {
212212
children:
213213
settingsRepository.getTabs().map((Tab tab) {
214214
if (tab.text == 'General') {
215-
return GeneralWidget(
216-
settingsRepository: settingsRepository,
217-
notifyParent: refresh);
215+
return GeneralWidget(notifyParent: refresh);
218216
}
219217
if (tab.text == 'Quickshifter') {
220218
return QuickshifterWidget(
221-
settingsRepository: settingsRepository,
222219
notifyParent: refresh,
223220
sendCutCommand: sendCutCommand,
224221
);
225222
}
226223
if (tab.text == 'Downshifter') {
227224
{
228225
return DownshifterWidget(
229-
settingsRepository: settingsRepository,
230226
notifyParent: refresh,
231227
sendBlipCommand: sendBlipCommand,
232228
);
@@ -248,7 +244,7 @@ class _SettingsScreenState extends State<SettingsScreen> {
248244
width: MediaQuery.of(context).size.width,
249245
height: 94,
250246
// width: 1000,
251-
child: SensorWidget(settingsRepository: settingsRepository),
247+
child: SensorWidget(),
252248
),
253249
),
254250
],
@@ -265,5 +261,3 @@ class _SettingsScreenState extends State<SettingsScreen> {
265261
);
266262
}
267263
}
268-
269-

lib/widgets/building_blocks/half_sensor_bar_widget.dart

Lines changed: 14 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,12 @@ import 'package:qs_ds_app/model/settings_repository.dart';
44
class HalfSensorBarWidget extends StatelessWidget {
55
const HalfSensorBarWidget({
66
Key? key,
7-
required this.settingsRepository,
87
required this.quarterTurns,
98
required this.reverse,
10-
required this.isPush, required this.color,
9+
required this.isPush,
10+
required this.color,
1111
}) : super(key: key);
1212

13-
final SettingsRepository settingsRepository;
1413
final int quarterTurns;
1514
final bool reverse;
1615
final bool isPush;
@@ -35,8 +34,8 @@ class HalfSensorBarWidget extends StatelessWidget {
3534
backgroundColor: Colors.black26,
3635
value: (reverse ? -1 : 1) *
3736
((double.tryParse(
38-
settingsRepository.sensorReading.value) ??
39-
2000) -
37+
SettingsRepository().sensorReading.value) ??
38+
2000) -
4039
2000) /
4140
2000,
4241
),
@@ -47,20 +46,20 @@ class HalfSensorBarWidget extends StatelessWidget {
4746
alignment: Alignment.center,
4847
child: Text(
4948
(isPush
50-
? (double.tryParse(
51-
settingsRepository.sensorReading.value) ??
52-
2000) <
53-
2000
54-
: (double.tryParse(
55-
settingsRepository.sensorReading.value) ??
56-
2000) >
57-
2000)
58-
? '${isPush ? 'Push' : 'Pull'} : ${((reverse ? -1 : 1) * ((double.tryParse(settingsRepository.sensorReading.value) ?? 2000) - 2000)).toStringAsFixed(0)}'
49+
? (double.tryParse(
50+
SettingsRepository().sensorReading.value) ??
51+
2000) <
52+
2000
53+
: (double.tryParse(
54+
SettingsRepository().sensorReading.value) ??
55+
2000) >
56+
2000)
57+
? '${isPush ? 'Push' : 'Pull'} : ${((reverse ? -1 : 1) * ((double.tryParse(SettingsRepository().sensorReading.value) ?? 2000) - 2000)).toStringAsFixed(0)}'
5958
: '',
6059
style: const TextStyle(color: Colors.white, fontSize: 25),
6160
)),
6261
],
6362
),
6463
);
6564
}
66-
}
65+
}

lib/widgets/downshifter_widget.dart

Lines changed: 66 additions & 72 deletions
Original file line numberDiff line numberDiff line change
@@ -7,19 +7,14 @@ import 'package:unicons/unicons.dart';
77

88
class DownshifterWidget extends StatefulWidget {
99
final Function() notifyParent;
10-
final SettingsRepository settingsRepository;
1110
final Function() sendBlipCommand;
1211

1312
const DownshifterWidget(
14-
{Key? key,
15-
required this.settingsRepository,
16-
required this.notifyParent,
17-
required this.sendBlipCommand})
13+
{Key? key, required this.notifyParent, required this.sendBlipCommand})
1814
: super(key: key);
1915

2016
@override
21-
State<DownshifterWidget> createState() =>
22-
_DownshifterWidgetState();
17+
State<DownshifterWidget> createState() => _DownshifterWidgetState();
2318
}
2419

2520
class _DownshifterWidgetState extends State<DownshifterWidget> {
@@ -39,7 +34,7 @@ class _DownshifterWidgetState extends State<DownshifterWidget> {
3934
mainAxisAlignment: MainAxisAlignment.spaceAround,
4035
children: [
4136
AnimatedToggleSwitch<bool>.dual(
42-
current: widget.settingsRepository.dsEnable.value == '1',
37+
current: SettingsRepository().dsEnable.value == '1',
4338
first: false,
4439
second: true,
4540
dif: 80.0,
@@ -56,8 +51,8 @@ class _DownshifterWidgetState extends State<DownshifterWidget> {
5651
),
5752
],
5853
onChanged: (b) => setState(() => b
59-
? widget.settingsRepository.dsEnable.value = '1'
60-
: widget.settingsRepository.dsEnable.value = '0'),
54+
? SettingsRepository().dsEnable.value = '1'
55+
: SettingsRepository().dsEnable.value = '0'),
6156
colorBuilder: (b) => b ? Colors.red : Colors.green,
6257
iconBuilder: (value) => value
6358
? const Icon(
@@ -83,8 +78,7 @@ class _DownshifterWidgetState extends State<DownshifterWidget> {
8378
)),
8479
),
8580
AnimatedToggleSwitch<bool>.dual(
86-
current:
87-
widget.settingsRepository.pushCheckQS.value == '0',
81+
current: SettingsRepository().pushCheckQS.value == '0',
8882
first: true,
8983
second: false,
9084
dif: 80.0,
@@ -101,8 +95,8 @@ class _DownshifterWidgetState extends State<DownshifterWidget> {
10195
),
10296
],
10397
onChanged: (b) => setState(() => b
104-
? widget.settingsRepository.pushCheckQS.value = '0'
105-
: widget.settingsRepository.pushCheckQS.value = '1'),
98+
? SettingsRepository().pushCheckQS.value = '0'
99+
: SettingsRepository().pushCheckQS.value = '1'),
106100
colorBuilder: (b) =>
107101
b ? const Color(0xFF622D5D) : const Color(0xFF2D3C62),
108102
iconBuilder: (value) => value
@@ -173,41 +167,41 @@ class _DownshifterWidgetState extends State<DownshifterWidget> {
173167
),
174168
),
175169
NumericSetting(
176-
setting: widget.settingsRepository.dsForce,
170+
setting: SettingsRepository().dsForce,
177171
notifyParent: widget.notifyParent,
178-
minAllowed: widget.settingsRepository.sensorNumericMin,
179-
maxAllowed: widget.settingsRepository.sensorNumericMax,
180-
step: widget.settingsRepository.sensorNumericStep),
172+
minAllowed: SettingsRepository().sensorNumericMin,
173+
maxAllowed: SettingsRepository().sensorNumericMax,
174+
step: SettingsRepository().sensorNumericStep),
181175
NumericSetting(
182-
setting: widget.settingsRepository.minRPMDS,
176+
setting: SettingsRepository().minRPMDS,
183177
notifyParent: widget.notifyParent,
184-
minAllowed: widget.settingsRepository.minRPMNumericMin,
185-
maxAllowed: (double.tryParse(
186-
widget.settingsRepository.maxRPMDS.value) ??
187-
widget.settingsRepository.maxRPMNumericMax) -
188-
500,
189-
step: widget.settingsRepository.minRPMNumericStep),
178+
minAllowed: SettingsRepository().minRPMNumericMin,
179+
maxAllowed:
180+
(double.tryParse(SettingsRepository().maxRPMDS.value) ??
181+
SettingsRepository().maxRPMNumericMax) -
182+
500,
183+
step: SettingsRepository().minRPMNumericStep),
190184
NumericSetting(
191-
setting: widget.settingsRepository.maxRPMDS,
185+
setting: SettingsRepository().maxRPMDS,
192186
notifyParent: widget.notifyParent,
193-
minAllowed: (double.tryParse(
194-
widget.settingsRepository.minRPMDS.value) ??
195-
widget.settingsRepository.minRPMNumericMin) +
196-
500,
197-
maxAllowed: widget.settingsRepository.maxRPMNumericMax,
198-
step: widget.settingsRepository.maxRPMNumericStep),
187+
minAllowed:
188+
(double.tryParse(SettingsRepository().minRPMDS.value) ??
189+
SettingsRepository().minRPMNumericMin) +
190+
500,
191+
maxAllowed: SettingsRepository().maxRPMNumericMax,
192+
step: SettingsRepository().maxRPMNumericStep),
199193
NumericSetting(
200-
setting: widget.settingsRepository.preDelayDS,
194+
setting: SettingsRepository().preDelayDS,
201195
notifyParent: widget.notifyParent,
202-
minAllowed: widget.settingsRepository.preDelayNumericMin,
203-
maxAllowed: widget.settingsRepository.preDelayNumericMax,
204-
step: widget.settingsRepository.preDelayNumericStep),
196+
minAllowed: SettingsRepository().preDelayNumericMin,
197+
maxAllowed: SettingsRepository().preDelayNumericMax,
198+
step: SettingsRepository().preDelayNumericStep),
205199
NumericSetting(
206-
setting: widget.settingsRepository.postDelayDS,
200+
setting: SettingsRepository().postDelayDS,
207201
notifyParent: widget.notifyParent,
208-
minAllowed: widget.settingsRepository.postDelayNumericMin,
209-
maxAllowed: widget.settingsRepository.postDelayNumericMax,
210-
step: widget.settingsRepository.postDelayNumericStep),
202+
minAllowed: SettingsRepository().postDelayNumericMin,
203+
maxAllowed: SettingsRepository().postDelayNumericMax,
204+
step: SettingsRepository().postDelayNumericStep),
211205
],
212206
),
213207
),
@@ -233,54 +227,54 @@ class _DownshifterWidgetState extends State<DownshifterWidget> {
233227
Padding(
234228
padding: const EdgeInsets.fromLTRB(0, 34, 0, 0),
235229
child: NumericSetting(
236-
setting: widget.settingsRepository.blipTime1,
230+
setting: SettingsRepository().blipTime1,
237231
notifyParent: widget.notifyParent,
238-
minAllowed: widget.settingsRepository.dsBlipNumericMin,
239-
maxAllowed: widget.settingsRepository.dsBlipNumericMax,
240-
step: widget.settingsRepository.dsBlipNumericStep),
232+
minAllowed: SettingsRepository().dsBlipNumericMin,
233+
maxAllowed: SettingsRepository().dsBlipNumericMax,
234+
step: SettingsRepository().dsBlipNumericStep),
241235
),
242236
NumericSetting(
243-
setting: widget.settingsRepository.blipTime2,
237+
setting: SettingsRepository().blipTime2,
244238
notifyParent: widget.notifyParent,
245-
minAllowed: widget.settingsRepository.dsBlipNumericMin,
246-
maxAllowed: widget.settingsRepository.dsBlipNumericMax,
247-
step: widget.settingsRepository.dsBlipNumericStep),
239+
minAllowed: SettingsRepository().dsBlipNumericMin,
240+
maxAllowed: SettingsRepository().dsBlipNumericMax,
241+
step: SettingsRepository().dsBlipNumericStep),
248242
NumericSetting(
249-
setting: widget.settingsRepository.blipTime3,
243+
setting: SettingsRepository().blipTime3,
250244
notifyParent: widget.notifyParent,
251-
minAllowed: widget.settingsRepository.dsBlipNumericMin,
252-
maxAllowed: widget.settingsRepository.dsBlipNumericMax,
253-
step: widget.settingsRepository.dsBlipNumericStep),
245+
minAllowed: SettingsRepository().dsBlipNumericMin,
246+
maxAllowed: SettingsRepository().dsBlipNumericMax,
247+
step: SettingsRepository().dsBlipNumericStep),
254248
NumericSetting(
255-
setting: widget.settingsRepository.blipTime4,
249+
setting: SettingsRepository().blipTime4,
256250
notifyParent: widget.notifyParent,
257-
minAllowed: widget.settingsRepository.dsBlipNumericMin,
258-
maxAllowed: widget.settingsRepository.dsBlipNumericMax,
259-
step: widget.settingsRepository.dsBlipNumericStep),
251+
minAllowed: SettingsRepository().dsBlipNumericMin,
252+
maxAllowed: SettingsRepository().dsBlipNumericMax,
253+
step: SettingsRepository().dsBlipNumericStep),
260254
NumericSetting(
261-
setting: widget.settingsRepository.blipTime5,
255+
setting: SettingsRepository().blipTime5,
262256
notifyParent: widget.notifyParent,
263-
minAllowed: widget.settingsRepository.dsBlipNumericMin,
264-
maxAllowed: widget.settingsRepository.dsBlipNumericMax,
265-
step: widget.settingsRepository.dsBlipNumericStep),
257+
minAllowed: SettingsRepository().dsBlipNumericMin,
258+
maxAllowed: SettingsRepository().dsBlipNumericMax,
259+
step: SettingsRepository().dsBlipNumericStep),
266260
NumericSetting(
267-
setting: widget.settingsRepository.blipTime6,
261+
setting: SettingsRepository().blipTime6,
268262
notifyParent: widget.notifyParent,
269-
minAllowed: widget.settingsRepository.dsBlipNumericMin,
270-
maxAllowed: widget.settingsRepository.dsBlipNumericMax,
271-
step: widget.settingsRepository.dsBlipNumericStep),
263+
minAllowed: SettingsRepository().dsBlipNumericMin,
264+
maxAllowed: SettingsRepository().dsBlipNumericMax,
265+
step: SettingsRepository().dsBlipNumericStep),
272266
NumericSetting(
273-
setting: widget.settingsRepository.blipTime7,
267+
setting: SettingsRepository().blipTime7,
274268
notifyParent: widget.notifyParent,
275-
minAllowed: widget.settingsRepository.dsBlipNumericMin,
276-
maxAllowed: widget.settingsRepository.dsBlipNumericMax,
277-
step: widget.settingsRepository.dsBlipNumericStep),
269+
minAllowed: SettingsRepository().dsBlipNumericMin,
270+
maxAllowed: SettingsRepository().dsBlipNumericMax,
271+
step: SettingsRepository().dsBlipNumericStep),
278272
NumericSetting(
279-
setting: widget.settingsRepository.blipTime8,
273+
setting: SettingsRepository().blipTime8,
280274
notifyParent: widget.notifyParent,
281-
minAllowed: widget.settingsRepository.dsBlipNumericMin,
282-
maxAllowed: widget.settingsRepository.dsBlipNumericMax,
283-
step: widget.settingsRepository.dsBlipNumericStep),
275+
minAllowed: SettingsRepository().dsBlipNumericMin,
276+
maxAllowed: SettingsRepository().dsBlipNumericMax,
277+
step: SettingsRepository().dsBlipNumericStep),
284278
],
285279
),
286280
),

lib/widgets/general_widget.dart

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,8 @@ import 'package:qs_ds_app/widgets/building_blocks/numeric_setting_widget.dart';
44

55
class GeneralWidget extends StatelessWidget {
66
final Function() notifyParent;
7-
final SettingsRepository settingsRepository;
87

9-
const GeneralWidget(
10-
{Key? key, required this.settingsRepository, required this.notifyParent})
11-
: super(key: key);
8+
const GeneralWidget({Key? key, required this.notifyParent}) : super(key: key);
129

1310
@override
1411
Widget build(BuildContext context) {
@@ -25,11 +22,11 @@ class GeneralWidget extends StatelessWidget {
2522
child: Column(
2623
children: [
2724
NumericSetting(
28-
setting: settingsRepository.pulses,
25+
setting: SettingsRepository().pulses,
2926
notifyParent: notifyParent,
30-
minAllowed: settingsRepository.pulsesNumericMin,
31-
maxAllowed: settingsRepository.pulsesNumericMax,
32-
step: getPulsesStep(settingsRepository.pulses.value)),
27+
minAllowed: SettingsRepository().pulsesNumericMin,
28+
maxAllowed: SettingsRepository().pulsesNumericMax,
29+
step: getPulsesStep(SettingsRepository().pulses.value)),
3330
],
3431
),
3532
),
@@ -39,7 +36,7 @@ class GeneralWidget extends StatelessWidget {
3936
Align(
4037
alignment: Alignment.topRight,
4138
child: Text(
42-
'Ver. ${settingsRepository.majorVersion.value}.${settingsRepository.minorVersion.value}'),
39+
'Ver. ${SettingsRepository().majorVersion.value}.${SettingsRepository().minorVersion.value}'),
4340
),
4441
],
4542
);

0 commit comments

Comments
 (0)