Skip to content

Commit cd5fa6f

Browse files
Elxas866simonoppowa
authored andcommitted
Fix negative height
1 parent 09504e0 commit cd5fa6f

File tree

1 file changed

+32
-12
lines changed

1 file changed

+32
-12
lines changed

lib/features/profile/presentation/widgets/set_height_dialog.dart

Lines changed: 32 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,9 @@ import 'package:flutter/material.dart';
22
import 'package:horizontal_picker/horizontal_picker.dart';
33
import 'package:opennutritracker/generated/l10n.dart';
44

5-
class SetHeightDialog extends StatelessWidget {
5+
class SetHeightDialog extends StatefulWidget {
66
static const _heightRangeCM = 100.0;
7-
static const _heightRangeFt = 10;
7+
static const _heightRangeFt = 10.0;
88

99
final double userHeight;
1010
final bool usesImperialUnits;
@@ -15,9 +15,29 @@ class SetHeightDialog extends StatelessWidget {
1515
required this.usesImperialUnits,
1616
});
1717

18+
@override
19+
State<SetHeightDialog> createState() => _SetHeightDialogState();
20+
}
21+
22+
class _SetHeightDialogState extends State<SetHeightDialog> {
23+
late double selectedHeight;
24+
25+
@override
26+
void initState() {
27+
super.initState();
28+
selectedHeight = widget.userHeight;
29+
}
30+
1831
@override
1932
Widget build(BuildContext context) {
20-
double selectedHeight = userHeight;
33+
final minValue = widget.usesImperialUnits
34+
? widget.userHeight - SetHeightDialog._heightRangeFt
35+
: widget.userHeight - SetHeightDialog._heightRangeCM;
36+
37+
final maxValue = widget.usesImperialUnits
38+
? widget.userHeight + SetHeightDialog._heightRangeFt
39+
: widget.userHeight + SetHeightDialog._heightRangeCM;
40+
2141
return AlertDialog(
2242
title: Text(S.of(context).selectHeightDialogLabel),
2343
content: Wrap(
@@ -27,18 +47,18 @@ class SetHeightDialog extends StatelessWidget {
2747
HorizontalPicker(
2848
height: 100,
2949
backgroundColor: Colors.transparent,
30-
minValue: usesImperialUnits
31-
? selectedHeight - _heightRangeFt
32-
: selectedHeight - _heightRangeCM,
33-
maxValue: usesImperialUnits
34-
? selectedHeight + _heightRangeFt
35-
: selectedHeight + _heightRangeCM,
50+
// Prevent negative minimum height
51+
minValue: minValue < 0 ? 1 : minValue, // setting it to 1, because 0 triggers zero-division error
52+
maxValue: maxValue,
3653
divisions: 400,
37-
suffix: usesImperialUnits
54+
suffix: widget.usesImperialUnits
3855
? S.of(context).ftLabel
3956
: S.of(context).cmLabel,
4057
onChanged: (value) {
41-
selectedHeight = value;
58+
setState(() {
59+
// Prevent negative height values
60+
selectedHeight = value < 0 ? 1 : value;
61+
});
4262
},
4363
),
4464
],
@@ -62,4 +82,4 @@ class SetHeightDialog extends StatelessWidget {
6282
],
6383
);
6484
}
65-
}
85+
}

0 commit comments

Comments
 (0)