2021-10-22 23:08:09 +00:00
|
|
|
import 'package:diameter/components/dialogs.dart';
|
2021-11-24 23:19:27 +00:00
|
|
|
import 'package:diameter/components/dropdown.dart';
|
2021-10-22 23:08:09 +00:00
|
|
|
import 'package:diameter/components/forms.dart';
|
2021-12-04 23:44:46 +00:00
|
|
|
import 'package:diameter/models/settings.dart';
|
2021-10-22 23:08:09 +00:00
|
|
|
import 'package:diameter/navigation.dart';
|
|
|
|
import 'package:flutter/material.dart';
|
|
|
|
|
2021-12-04 23:44:46 +00:00
|
|
|
class SettingsScreen extends StatefulWidget {
|
|
|
|
static const String routeName = '/settings';
|
2021-10-22 23:08:09 +00:00
|
|
|
|
2021-12-04 23:44:46 +00:00
|
|
|
const SettingsScreen({Key? key}) : super(key: key);
|
2021-10-22 23:08:09 +00:00
|
|
|
|
2021-12-04 23:44:46 +00:00
|
|
|
@override
|
|
|
|
_SettingsScreenState createState() => _SettingsScreenState();
|
2021-10-22 23:08:09 +00:00
|
|
|
}
|
|
|
|
|
2021-12-04 23:44:46 +00:00
|
|
|
class _SettingsScreenState extends State<SettingsScreen> {
|
|
|
|
late Settings _settings;
|
2021-10-22 23:08:09 +00:00
|
|
|
|
2021-12-04 23:44:46 +00:00
|
|
|
late bool _onlyDisplayActiveGlucoseMeasurement;
|
|
|
|
late bool _displayBothGlucoseMeasurementsInDetailView;
|
|
|
|
late bool _displayBothGlucoseMeasurementsInListView;
|
2021-10-22 23:08:09 +00:00
|
|
|
|
2021-12-04 23:44:46 +00:00
|
|
|
@override
|
|
|
|
void initState() {
|
|
|
|
super.initState();
|
|
|
|
reload();
|
2021-10-22 23:08:09 +00:00
|
|
|
}
|
|
|
|
|
2021-12-04 23:44:46 +00:00
|
|
|
void onReset() {
|
|
|
|
Settings.reset();
|
|
|
|
reload(message: 'Settings have been reset to default');
|
2021-10-22 23:08:09 +00:00
|
|
|
}
|
|
|
|
|
2021-12-04 23:44:46 +00:00
|
|
|
void saveSettings() {
|
|
|
|
Settings.put(Settings(
|
|
|
|
id: _settings.id,
|
|
|
|
nutritionMeasurement: _settings.nutritionMeasurement,
|
|
|
|
glucoseDisplayMode: _settings.glucoseDisplayMode,
|
|
|
|
glucoseMeasurement: _settings.glucoseMeasurement,
|
|
|
|
dateFormat: _settings.dateFormat,
|
|
|
|
longDateFormat: _settings.longDateFormat,
|
|
|
|
timeFormat: _settings.timeFormat,
|
|
|
|
longTimeFormat: _settings.longTimeFormat,
|
|
|
|
showConfirmationDialogOnCancel: _settings.showConfirmationDialogOnCancel,
|
|
|
|
showConfirmationDialogOnDelete: _settings.showConfirmationDialogOnDelete,
|
|
|
|
showConfirmationDialogOnStopEvent:
|
|
|
|
_settings.showConfirmationDialogOnStopEvent,
|
|
|
|
lowGlucoseMgPerDl: _settings.lowGlucoseMgPerDl,
|
|
|
|
moderateGlucoseMgPerDl: _settings.moderateGlucoseMgPerDl,
|
|
|
|
highGlucoseMgPerDl: _settings.highGlucoseMgPerDl,
|
|
|
|
lowGlucoseMmolPerL: _settings.lowGlucoseMmolPerL,
|
|
|
|
moderateGlucoseMmolPerL: _settings.moderateGlucoseMmolPerL,
|
|
|
|
highGlucoseMmolPerDl: _settings.highGlucoseMmolPerDl,
|
|
|
|
));
|
|
|
|
reload(message: 'Settings updated');
|
2021-10-22 23:08:09 +00:00
|
|
|
}
|
|
|
|
|
2021-12-04 23:44:46 +00:00
|
|
|
void reload({String? message}) {
|
|
|
|
setState(() {
|
|
|
|
_settings = Settings.get();
|
|
|
|
});
|
2021-10-22 23:08:09 +00:00
|
|
|
|
2021-12-04 23:44:46 +00:00
|
|
|
setState(() {
|
|
|
|
_onlyDisplayActiveGlucoseMeasurement =
|
|
|
|
_settings.glucoseDisplayMode == GlucoseDisplayMode.activeOnly;
|
|
|
|
_displayBothGlucoseMeasurementsInDetailView =
|
|
|
|
_settings.glucoseDisplayMode == GlucoseDisplayMode.both ||
|
|
|
|
_settings.glucoseDisplayMode == GlucoseDisplayMode.bothForDetail;
|
|
|
|
_displayBothGlucoseMeasurementsInListView =
|
|
|
|
_settings.glucoseDisplayMode == GlucoseDisplayMode.both ||
|
|
|
|
_settings.glucoseDisplayMode == GlucoseDisplayMode.bothForList;
|
|
|
|
});
|
2021-10-22 23:08:09 +00:00
|
|
|
|
|
|
|
setState(() {
|
2021-12-04 23:44:46 +00:00
|
|
|
if (message != null) {
|
|
|
|
var snackBar = SnackBar(
|
|
|
|
content: Text(message),
|
|
|
|
duration: const Duration(seconds: 2),
|
|
|
|
);
|
|
|
|
ScaffoldMessenger.of(context)
|
|
|
|
..removeCurrentSnackBar()
|
|
|
|
..showSnackBar(snackBar);
|
|
|
|
}
|
2021-10-22 23:08:09 +00:00
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
void handleResetAction() async {
|
|
|
|
Dialogs.showConfirmationDialog(
|
|
|
|
context: context,
|
|
|
|
onConfirm: onReset,
|
|
|
|
message: 'Are you sure you want to reset all settings?',
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
@override
|
|
|
|
Widget build(BuildContext context) {
|
|
|
|
return Scaffold(
|
|
|
|
appBar: AppBar(
|
|
|
|
title: const Text('Application Settings'),
|
|
|
|
),
|
|
|
|
drawer: const Navigation(currentLocation: SettingsScreen.routeName),
|
|
|
|
body: SingleChildScrollView(
|
|
|
|
child: Column(
|
|
|
|
children: <Widget>[
|
2021-12-04 23:44:46 +00:00
|
|
|
AutoCompleteDropdownButton<String>(
|
|
|
|
selectedItem: nutritionMeasurementLabels[
|
|
|
|
_settings.nutritionMeasurement.index],
|
|
|
|
label: 'Preferred Nutrition Measurement',
|
|
|
|
items: nutritionMeasurementLabels,
|
|
|
|
onChanged: (value) {
|
|
|
|
if (value != null) {
|
|
|
|
_settings.nutritionMeasurement = NutritionMeasurement.values
|
|
|
|
.elementAt(nutritionMeasurementLabels.indexOf(value));
|
|
|
|
saveSettings();
|
|
|
|
}
|
|
|
|
},
|
|
|
|
),
|
|
|
|
AutoCompleteDropdownButton<String>(
|
|
|
|
selectedItem:
|
|
|
|
glucoseMeasurementLabels[_settings.glucoseMeasurement.index],
|
|
|
|
label: 'Preferred Glucose Measurement',
|
|
|
|
items: glucoseMeasurementLabels,
|
|
|
|
onChanged: (value) {
|
|
|
|
if (value != null) {
|
|
|
|
_settings.glucoseMeasurement = GlucoseMeasurement.values
|
|
|
|
.elementAt(glucoseMeasurementLabels.indexOf(value));
|
|
|
|
saveSettings();
|
|
|
|
}
|
|
|
|
},
|
|
|
|
),
|
|
|
|
BooleanFormField(
|
|
|
|
value: _onlyDisplayActiveGlucoseMeasurement,
|
|
|
|
label: 'only display active glucose measurement',
|
|
|
|
onChanged: (_) {
|
|
|
|
GlucoseDisplayMode mode = _settings.glucoseDisplayMode ==
|
|
|
|
GlucoseDisplayMode.activeOnly
|
|
|
|
? GlucoseDisplayMode.both
|
|
|
|
: GlucoseDisplayMode.activeOnly;
|
|
|
|
_settings.glucoseDisplayMode = mode;
|
|
|
|
saveSettings();
|
|
|
|
},
|
|
|
|
),
|
|
|
|
BooleanFormField(
|
|
|
|
value: _displayBothGlucoseMeasurementsInDetailView,
|
|
|
|
enabled:
|
|
|
|
!_onlyDisplayActiveGlucoseMeasurement,
|
|
|
|
label: 'display both glucose measurements in detail view',
|
|
|
|
onChanged: (_) {
|
|
|
|
GlucoseDisplayMode mode =
|
|
|
|
_settings.glucoseDisplayMode == GlucoseDisplayMode.both
|
2021-10-22 23:08:09 +00:00
|
|
|
? GlucoseDisplayMode.bothForList
|
2021-12-04 23:44:46 +00:00
|
|
|
: _settings.glucoseDisplayMode ==
|
|
|
|
GlucoseDisplayMode.bothForList
|
2021-10-22 23:08:09 +00:00
|
|
|
? GlucoseDisplayMode.both
|
|
|
|
: GlucoseDisplayMode.activeOnly;
|
2021-12-04 23:44:46 +00:00
|
|
|
_settings.glucoseDisplayMode = mode;
|
|
|
|
saveSettings();
|
|
|
|
},
|
|
|
|
),
|
|
|
|
BooleanFormField(
|
|
|
|
value: _displayBothGlucoseMeasurementsInListView,
|
|
|
|
enabled:
|
|
|
|
!_onlyDisplayActiveGlucoseMeasurement,
|
|
|
|
label: 'display both glucose measurements in list view',
|
|
|
|
onChanged: (_) {
|
|
|
|
GlucoseDisplayMode mode =
|
|
|
|
_settings.glucoseDisplayMode == GlucoseDisplayMode.both
|
2021-10-22 23:08:09 +00:00
|
|
|
? GlucoseDisplayMode.bothForDetail
|
2021-12-04 23:44:46 +00:00
|
|
|
: _settings.glucoseDisplayMode ==
|
|
|
|
GlucoseDisplayMode.bothForDetail
|
2021-10-22 23:08:09 +00:00
|
|
|
? GlucoseDisplayMode.both
|
|
|
|
: GlucoseDisplayMode.activeOnly;
|
2021-12-04 23:44:46 +00:00
|
|
|
_settings.glucoseDisplayMode = mode;
|
|
|
|
saveSettings();
|
|
|
|
},
|
2021-10-22 23:08:09 +00:00
|
|
|
),
|
|
|
|
],
|
|
|
|
),
|
|
|
|
),
|
|
|
|
bottomNavigationBar: BottomAppBar(
|
|
|
|
child: Padding(
|
|
|
|
padding: const EdgeInsets.all(10.0),
|
|
|
|
child: Row(
|
|
|
|
children: [
|
|
|
|
ElevatedButton.icon(
|
|
|
|
onPressed: handleResetAction,
|
|
|
|
icon: const Icon(
|
|
|
|
Icons.settings_backup_restore,
|
|
|
|
size: 18.0,
|
|
|
|
),
|
|
|
|
label: const Text('RESET ALL'),
|
|
|
|
),
|
|
|
|
const Spacer(),
|
|
|
|
],
|
|
|
|
),
|
|
|
|
),
|
|
|
|
),
|
|
|
|
);
|
|
|
|
}
|
|
|
|
}
|