@@ -2,9 +2,9 @@ import 'package:flutter/material.dart';
22import 'package:horizontal_picker/horizontal_picker.dart' ;
33import '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