Commit 72cf954
Changed files (6)
app
lib
components
dialoges
measurement_list
app/lib/components/dialoges/add_measurement_dialoge.dart
@@ -6,12 +6,11 @@ import 'package:blood_pressure_app/components/date_time_picker.dart';
import 'package:blood_pressure_app/components/dialoges/fullscreen_dialoge.dart';
import 'package:blood_pressure_app/components/settings/settings_widgets.dart';
import 'package:blood_pressure_app/model/blood_pressure/needle_pin.dart';
-import 'package:blood_pressure_app/model/blood_pressure/record.dart';
import 'package:blood_pressure_app/model/storage/storage.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
-import 'package:health_data_store/health_data_store.dart' hide BloodPressureRecord;
+import 'package:health_data_store/health_data_store.dart';
import 'package:intl/intl.dart';
/// Input mask for entering measurements.
app/lib/components/measurement_list/measurement_list.dart
@@ -1,11 +1,10 @@
import 'package:blood_pressure_app/components/measurement_list/intake_list_entry.dart';
import 'package:blood_pressure_app/components/measurement_list/measurement_list_entry.dart';
-import 'package:blood_pressure_app/model/blood_pressure/record.dart';
import 'package:blood_pressure_app/model/storage/settings_store.dart';
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
-import 'package:health_data_store/health_data_store.dart' show MedicineIntake, MedicineIntakeRepository;
+import 'package:health_data_store/health_data_store.dart' show BloodPressureRecord, MedicineIntake, MedicineIntakeRepository;
/// List that renders measurements and medicine intakes.
///
app/lib/screens/elements/blood_pressure_builder.dart
@@ -1,11 +1,10 @@
import 'dart:collection';
-import 'package:blood_pressure_app/components/consistent_future_builder.dart';
-import 'package:blood_pressure_app/model/blood_pressure/model.dart';
-import 'package:blood_pressure_app/model/blood_pressure/record.dart';
+import 'package:blood_pressure_app/components/repository_builder.dart';
import 'package:blood_pressure_app/model/storage/intervall_store.dart';
+import 'package:collection/collection.dart';
import 'package:flutter/material.dart';
-import 'package:provider/provider.dart';
+import 'package:health_data_store/health_data_store.dart';
/// Shorthand class for getting the blood pressure values.
class BloodPressureBuilder extends StatelessWidget {
@@ -23,17 +22,12 @@ class BloodPressureBuilder extends StatelessWidget {
final IntervallStoreManagerLocation rangeType;
@override
- Widget build(BuildContext context) => Consumer<BloodPressureModel>(
- builder: (context, model, child) =>
- Consumer<IntervallStoreManager>(
- builder: (context, intervallManager, child) {
- final range = intervallManager.get(rangeType).currentRange;
- return ConsistentFutureBuilder<UnmodifiableListView<BloodPressureRecord>>(
- future: model.getInTimeRange(range.start, range.end),
- onData: onData,
- );
- },
- ),
- );
+ Widget build(BuildContext context) =>
+ RepositoryBuilder<BloodPressureRecord, BloodPressureRepository>(
+ rangeType: rangeType,
+ // TODO: Figure out why type safety isn't possible. (see home_screen for more info)
+ onData: (context, List<dynamic> data) =>
+ onData(context, UnmodifiableListView(data.cast())),
+ );
}
app/lib/screens/elements/legacy_measurement_list.dart
@@ -1,15 +1,15 @@
+import 'dart:async';
import 'dart:collection';
import 'package:blood_pressure_app/components/dialoges/add_measurement_dialoge.dart';
import 'package:blood_pressure_app/model/blood_pressure/model.dart';
-import 'package:blood_pressure_app/model/blood_pressure/record.dart';
import 'package:blood_pressure_app/model/storage/intervall_store.dart';
import 'package:blood_pressure_app/model/storage/settings_store.dart';
import 'package:blood_pressure_app/screens/elements/blood_pressure_builder.dart';
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
-import 'package:health_data_store/health_data_store.dart' hide BloodPressureRecord;
+import 'package:health_data_store/health_data_store.dart';
import 'package:intl/intl.dart';
import 'package:provider/provider.dart';
@@ -82,9 +82,9 @@ class LegacyMeasurementsList extends StatelessWidget {
return Column(
children: [
Dismissible(
- key: Key(data[index].creationTime.toIso8601String()),
+ key: Key(data[index].time.toIso8601String()),
confirmDismiss: (direction) async {
- final model = Provider.of<BloodPressureModel>(context, listen: false);
+ final repo = RepositoryProvider.of<BloodPressureRepository>(context);
if (direction == DismissDirection.startToEnd) { // edit
final model = Provider.of<BloodPressureModel>(context, listen: false);
final entry = await showAddEntryDialoge(context,
@@ -94,9 +94,11 @@ class LegacyMeasurementsList extends StatelessWidget {
);
if (entry?.$1 != null) {
if (context.mounted) {
- model.addAndExport(context, entry!.$1!);
+ // TODO: reimplement
+ // repo.addAndExport(context, entry!.$1!);
+ throw UnimplementedError('addAndExport not supported');
} else {
- model.add(entry!.$1!);
+ unawaited(repo.add(entry!.$1!));
}
}
assert(entry?.$2 == null);
@@ -115,7 +117,7 @@ class LegacyMeasurementsList extends StatelessWidget {
child: Text(AppLocalizations.of(context)!.btnCancel),),
ElevatedButton(
onPressed: () {
- model.delete(data[index].creationTime);
+ unawaited(repo.remove(data[index]));
dialogeDeletionConfirmed = true;
Navigator.pop(context, );
@@ -124,7 +126,7 @@ class LegacyMeasurementsList extends StatelessWidget {
],
),);
} else {
- model.delete(data[index].creationTime);
+ unawaited(repo.remove(data[index]));
dialogeDeletionConfirmed = true;
}
@@ -137,12 +139,16 @@ class LegacyMeasurementsList extends StatelessWidget {
action: SnackBarAction(
label: AppLocalizations.of(context)!.btnUndo,
onPressed: () async {
+ // TODO: reimplement
+ /*
model.addAndExport(context, BloodPressureRecord(
data[index].creationTime,
data[index].systolic,
data[index].diastolic,
data[index].pulse,
data[index].notes,),);
+ */
+ throw UnimplementedError('addAndExport not supported');
},
),
),);
@@ -172,19 +178,20 @@ class LegacyMeasurementsList extends StatelessWidget {
),
Expanded(
flex: _tableElementsSizes[0],
- child: Text(formatter.format(data[index].creationTime)),),
+ child: Text(formatter.format(data[index].time)),),
Expanded(
flex: _tableElementsSizes[1],
- child: Text((data[index].systolic ?? '').toString()),),
+ child: Text((data[index].sys ?? '').toString()),),
Expanded(
flex: _tableElementsSizes[2],
- child: Text((data[index].diastolic ?? '').toString()),),
+ child: Text((data[index].dia ?? '').toString()),),
Expanded(
flex: _tableElementsSizes[3],
- child: Text((data[index].pulse ?? '').toString()),),
- Expanded(
+ child: Text((data[index].pul ?? '').toString()),),
+ // TODO: reimplement notes
+ /*Expanded(
flex: _tableElementsSizes[4],
- child: Text(data[index].notes),),
+ child: Text(data[index].),),*/
Expanded(
flex: _sideFlex,
child: const SizedBox(),
app/lib/screens/elements/measurement_graph.dart
@@ -1,7 +1,6 @@
import 'dart:math';
import 'package:blood_pressure_app/components/repository_builder.dart';
-import 'package:blood_pressure_app/model/blood_pressure/record.dart';
import 'package:blood_pressure_app/model/horizontal_graph_line.dart';
import 'package:blood_pressure_app/model/storage/intervall_store.dart';
import 'package:blood_pressure_app/model/storage/settings_store.dart';
@@ -11,7 +10,7 @@ import 'package:collection/collection.dart';
import 'package:fl_chart/fl_chart.dart';
import 'package:flutter/material.dart';
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
-import 'package:health_data_store/health_data_store.dart' hide BloodPressureRecord;
+import 'package:health_data_store/health_data_store.dart';
import 'package:intl/intl.dart';
import 'package:provider/provider.dart';
@@ -38,7 +37,7 @@ class _LineChartState extends State<_LineChart> {
final List<MedicineIntake> intakes = intakesData.cast();
final List<BloodPressureRecord> data = records.toList();
- data.sort((a, b) => a.creationTime.compareTo(b.creationTime));
+ data.sort((a, b) => a.time.compareTo(b.time));
// calculate lines for graph
final pulSpots = <FlSpot>[];
@@ -51,18 +50,18 @@ class _LineChartState extends State<_LineChart> {
/// Horizontally last value
double? graphEnd;
for (final e in data) {
- final x = e.creationTime.millisecondsSinceEpoch.toDouble();
- if (e.diastolic != null) {
- diaSpots.add(FlSpot(x, e.diastolic!.toDouble()));
- maxValue = max(maxValue, e.diastolic!);
+ final x = e.time.millisecondsSinceEpoch.toDouble();
+ if (e.dia != null) {
+ diaSpots.add(FlSpot(x, e.dia!.mmHg.toDouble()));
+ maxValue = max(maxValue, e.dia!.mmHg);
}
- if (e.systolic != null) {
- sysSpots.add(FlSpot(x, e.systolic!.toDouble()));
- maxValue = max(maxValue, e.systolic!);
+ if (e.sys != null) {
+ sysSpots.add(FlSpot(x, e.sys!.mmHg.toDouble()));
+ maxValue = max(maxValue, e.sys!.mmHg);
}
- if (e.pulse != null) {
- pulSpots.add(FlSpot(x, e.pulse!.toDouble()));
- maxValue = max(maxValue, e.pulse!);
+ if (e.pul != null) {
+ pulSpots.add(FlSpot(x, e.pul!.mmHg.toDouble()));
+ maxValue = max(maxValue, e.pul!.mmHg);
}
graphBegin ??= x;
graphEnd ??= x;
@@ -91,7 +90,7 @@ class _LineChartState extends State<_LineChart> {
maxX: graphEnd,
clipData: const FlClipData.all(),
titlesData: _buildFlTitlesData(settings,
- DateTimeRange(start: data.first.creationTime, end: data.last.creationTime),),
+ DateTimeRange(start: data.first.time, end: data.last.time),),
lineTouchData: const LineTouchData(
touchTooltipData: LineTouchTooltipData(tooltipMargin: -200, tooltipRoundedRadius: 20),
),
@@ -192,17 +191,18 @@ class _LineChartState extends State<_LineChart> {
List<LineChartBarData> _buildNeedlePins(Iterable<BloodPressureRecord> allRecords, int min, int max, Settings settings,) {
final pins = <LineChartBarData>[];
- for (final r in allRecords.where((e) => e.needlePin != null)) {
+ // TODO: reimplement with health data store notes type
+ /*for (final r in allRecords.where((e) => e.needlePin != null)) {
pins.add(LineChartBarData(
spots: [
- FlSpot(r.creationTime.millisecondsSinceEpoch.toDouble(), min.toDouble()),
- FlSpot(r.creationTime.millisecondsSinceEpoch.toDouble(), max + 5),
+ FlSpot(r.time.millisecondsSinceEpoch.toDouble(), min.toDouble()),
+ FlSpot(r.time.millisecondsSinceEpoch.toDouble(), max + 5),
],
barWidth: settings.needlePinBarWidth,
dotData: const FlDotData(show: false),
color: r.needlePin!.color.withAlpha(100),
),);
- }
+ }*/
return pins;
}
@@ -257,7 +257,7 @@ class _LineChartState extends State<_LineChart> {
);
}
-// TODO: document
+// TODO: rewrite without fl_chart and simpler to maintain
class MeasurementGraph extends StatelessWidget {
const MeasurementGraph({super.key, this.height = 290});
app/lib/screens/home_screen.dart
@@ -1,3 +1,5 @@
+import 'dart:async';
+
import 'package:blood_pressure_app/components/dialoges/add_measurement_dialoge.dart';
import 'package:blood_pressure_app/components/measurement_list/measurement_list.dart';
import 'package:blood_pressure_app/components/repository_builder.dart';
@@ -14,7 +16,7 @@ import 'package:flutter/scheduler.dart';
import 'package:flutter/services.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
-import 'package:health_data_store/health_data_store.dart' show MedicineIntake, MedicineIntakeRepository, MedicineRepository;
+import 'package:health_data_store/health_data_store.dart' show BloodPressureRepository, MedicineIntake, MedicineIntakeRepository, MedicineRepository;
import 'package:provider/provider.dart';
/// Is true during the first [AppHome.build] before creating the widget.
@@ -33,7 +35,7 @@ class AppHome extends StatelessWidget {
if (_appStart) {
if (Provider.of<Settings>(context, listen: false).startWithAddMeasurementPage) {
SchedulerBinding.instance.addPostFrameCallback((_) async {
- final model = Provider.of<BloodPressureModel>(context, listen: false);
+ final repo = RepositoryProvider.of<BloodPressureRepository>(context);
final intakes = RepositoryProvider.of<MedicineIntakeRepository>(context);
final measurement = await showAddEntryDialoge(context,
Provider.of<Settings>(context, listen: false),
@@ -42,13 +44,15 @@ class AppHome extends StatelessWidget {
if (measurement == null) return;
if (measurement.$1 != null) {
if (context.mounted) {
- model.addAndExport(context, measurement.$1!);
+ // TODO: reimplement
+ // model.addAndExport(context, measurement.$1!);
+ throw UnimplementedError('addAndExport not supported');
} else {
- model.add(measurement.$1!);
+ unawaited(repo.add(measurement.$1!));
}
}
if (measurement.$2 != null) {
- intakes.add(measurement.$2!);
+ unawaited(intakes.add(measurement.$2!));
}
});
}