Skip to content

Commit bd7088d

Browse files
Dieterberolandgeider
authored andcommitted
use a 'sensible range' for headline weight/measurements charts
this allows user to focus on their recent progress on the initial chart. if they want to see the full history, that's only a tap away
1 parent 1a25f0f commit bd7088d

File tree

3 files changed

+35
-6
lines changed

3 files changed

+35
-6
lines changed

lib/widgets/dashboard/widgets.dart

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ import 'package:wger/widgets/core/core.dart';
4242
import 'package:wger/widgets/measurements/categories_card.dart';
4343
import 'package:wger/widgets/measurements/charts.dart';
4444
import 'package:wger/widgets/measurements/forms.dart';
45+
import 'package:wger/widgets/measurements/helpers.dart';
4546
import 'package:wger/widgets/nutrition/charts.dart';
4647
import 'package:wger/widgets/nutrition/forms.dart';
4748
import 'package:wger/widgets/weight/forms.dart';
@@ -161,9 +162,9 @@ class _DashboardWeightWidgetState extends State<DashboardWeightWidget> {
161162
final profile = context.read<UserProvider>().profile;
162163
final weightProvider = context.read<BodyWeightProvider>();
163164

164-
final entriesAll =
165-
weightProvider.items.map((e) => MeasurementChartEntry(e.weight, e.date)).toList();
166-
final entries7dAvg = moving7dAverage(entriesAll);
165+
final (entriesAll, entries7dAvg) = sensibleRange(
166+
weightProvider.items.map((e) => MeasurementChartEntry(e.weight, e.date)).toList(),
167+
);
167168

168169
return Consumer<BodyWeightProvider>(
169170
builder: (context, workoutProvider, child) => Card(

lib/widgets/measurements/categories_card.dart

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import 'package:flutter_gen/gen_l10n/app_localizations.dart';
44
import 'package:wger/models/measurements/measurement_category.dart';
55
import 'package:wger/screens/form_screen.dart';
66
import 'package:wger/screens/measurement_entries_screen.dart';
7+
import 'package:wger/widgets/measurements/helpers.dart';
78
import 'charts.dart';
89
import 'forms.dart';
910

@@ -15,9 +16,9 @@ class CategoriesCard extends StatelessWidget {
1516

1617
@override
1718
Widget build(BuildContext context) {
18-
final entriesAll =
19-
currentCategory.entries.map((e) => MeasurementChartEntry(e.value, e.date)).toList();
20-
final entries7dAvg = moving7dAverage(entriesAll);
19+
final (entriesAll, entries7dAvg) = sensibleRange(
20+
currentCategory.entries.map((e) => MeasurementChartEntry(e.value, e.date)).toList(),
21+
);
2122

2223
return Card(
2324
elevation: elevation,

lib/widgets/measurements/helpers.dart

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,3 +77,30 @@ List<Widget> getOverviewWidgetsSeries(
7777
),
7878
];
7979
}
80+
81+
// return the raw and average meaasurements for a "sensible range"
82+
// a sensible range is something relatively recent, which is most relevant
83+
// for the user to track their progress, but a range should always include
84+
// at least 5 points, and if not we chose a bigger one.
85+
// we return a range of the last 2 months, 4 months, or the full history
86+
(List<MeasurementChartEntry>, List<MeasurementChartEntry>) sensibleRange(
87+
List<MeasurementChartEntry> entriesAll,
88+
) {
89+
final entries7dAvg = moving7dAverage(entriesAll);
90+
final twoMonthsAgo = DateTime.now().subtract(const Duration(days: 61));
91+
final fourMonthsAgo = DateTime.now().subtract(const Duration(days: 122));
92+
93+
if (entriesAll.where((e) => e.date.isAfter(twoMonthsAgo)).length > 4) {
94+
return (
95+
entriesAll.where((e) => e.date.isAfter(twoMonthsAgo)).toList(),
96+
entries7dAvg.where((e) => e.date.isAfter(twoMonthsAgo)).toList(),
97+
);
98+
}
99+
if (entriesAll.where((e) => e.date.isAfter(fourMonthsAgo)).length > 4) {
100+
return (
101+
entriesAll.where((e) => e.date.isAfter(fourMonthsAgo)).toList(),
102+
entries7dAvg.where((e) => e.date.isAfter(fourMonthsAgo)).toList(),
103+
);
104+
}
105+
return (entriesAll, entries7dAvg);
106+
}

0 commit comments

Comments
 (0)