Skip to content

Commit 0f07ffb

Browse files
committed
Improve input formatting handling
1 parent 2338cc8 commit 0f07ffb

File tree

1 file changed

+13
-6
lines changed

1 file changed

+13
-6
lines changed

lib/feature/sound/modal/section/integer_fields_section.dart

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
11
import 'package:flutter/material.dart';
2-
import 'package:flutter/services.dart';
32
import 'package:stelaris/feature/sound/modal/section/base_section.dart';
3+
import 'package:stelaris/util/formatter/min_value_fomatter.dart';
44

55
class IntegerFieldsSection extends StatefulWidget {
66
final int initialWeight;
77
final int initialAttenuationDistance;
8+
final int minValue;
89
final ValueChanged<int> onWeightChanged;
910
final ValueChanged<int> onAttenuationDistanceChanged;
1011

@@ -13,6 +14,7 @@ class IntegerFieldsSection extends StatefulWidget {
1314
required this.initialAttenuationDistance,
1415
required this.onWeightChanged,
1516
required this.onAttenuationDistanceChanged,
17+
this.minValue = 1,
1618
super.key,
1719
});
1820

@@ -53,15 +55,18 @@ class _IntegerFieldsSectionState extends State<IntegerFieldsSection> {
5355
border: OutlineInputBorder(),
5456
),
5557
inputFormatters: [
56-
FilteringTextInputFormatter.digitsOnly,
58+
MinValueFormatter(widget.minValue)
5759
],
5860
validator: (v) {
5961
if (v == null || v.isEmpty) return 'Enter a weight';
6062
final val = int.tryParse(v);
6163
if (val == null) return 'Enter a valid integer';
6264
return null;
6365
},
64-
onChanged: (v) => widget.onWeightChanged(int.tryParse(v) ?? 1),
66+
onChanged: (v) {
67+
final parsed = int.tryParse(v);
68+
if (parsed != null) widget.onWeightChanged(parsed);
69+
},
6570
),
6671
const SizedBox(height: 12),
6772
TextFormField(
@@ -72,16 +77,18 @@ class _IntegerFieldsSectionState extends State<IntegerFieldsSection> {
7277
border: OutlineInputBorder(),
7378
),
7479
inputFormatters: [
75-
FilteringTextInputFormatter.digitsOnly,
80+
MinValueFormatter(widget.minValue)
7681
],
7782
validator: (v) {
7883
if (v == null || v.isEmpty) return 'Enter a distance';
7984
final val = int.tryParse(v);
8085
if (val == null) return 'Enter a valid integer';
8186
return null;
8287
},
83-
onChanged: (v) =>
84-
widget.onAttenuationDistanceChanged(int.tryParse(v) ?? 16),
88+
onChanged: (v) {
89+
final parsed = int.tryParse(v);
90+
if (parsed != null) widget.onAttenuationDistanceChanged(parsed);
91+
},
8592
),
8693
],
8794
),

0 commit comments

Comments
 (0)