flutter_input_library/lib/src/inputs/number_picker/number_picker.dart

62 lines
1.7 KiB
Dart
Raw Normal View History

2022-11-29 13:16:44 +01:00
// SPDX-FileCopyrightText: 2022 Iconica
//
// SPDX-License-Identifier: BSD-3-Clause
import 'package:flutter/material.dart';
2024-02-02 11:48:45 +01:00
import 'package:flutter_input_library/src/inputs/number_picker/number_picker_field.dart';
2022-11-29 13:16:44 +01:00
class FlutterFormInputNumberPicker extends StatelessWidget {
2022-11-29 13:16:44 +01:00
const FlutterFormInputNumberPicker({
2024-02-02 11:48:45 +01:00
super.key,
2022-11-29 13:16:44 +01:00
this.minValue = 0,
this.maxValue = 100,
this.onSaved,
this.onChanged,
this.initialValue,
this.validator,
2024-02-02 11:48:45 +01:00
}) : assert(minValue < maxValue, 'minValue must be less than maxValue');
2022-11-29 13:16:44 +01:00
final int minValue;
final int maxValue;
final Function(int?)? onSaved;
2022-11-29 13:37:58 +01:00
final String? Function(int?)? validator;
2022-11-29 13:16:44 +01:00
final int? initialValue;
final Function(int?)? onChanged;
@override
2024-02-02 11:48:45 +01:00
Widget build(BuildContext context) => NumberPickerFormField(
minValue: minValue,
maxValue: maxValue,
onSaved: (value) => onSaved?.call(value),
validator: (value) => validator?.call(value),
onChanged: (value) => onChanged?.call(value),
initialValue: initialValue ?? 0,
);
2022-11-29 13:16:44 +01:00
}
class NumberPickerFormField extends FormField<int> {
NumberPickerFormField({
2024-02-02 11:48:45 +01:00
required FormFieldSetter<int> super.onSaved,
required FormFieldValidator<int> super.validator,
super.key,
2022-11-29 13:16:44 +01:00
void Function(int value)? onChanged,
2024-02-02 11:48:45 +01:00
int super.initialValue = 0,
2022-11-29 13:16:44 +01:00
int minValue = 0,
int maxValue = 100,
}) : super(
2024-02-02 11:48:45 +01:00
builder: (FormFieldState<int> state) => NumberPicker(
minValue: minValue,
maxValue: maxValue,
value: initialValue,
onChanged: (int value) {
onChanged?.call(value);
2022-11-29 13:16:44 +01:00
2024-02-02 11:48:45 +01:00
state.didChange(value);
},
itemHeight: 35,
itemCount: 5,
),
);
2022-11-29 13:16:44 +01:00
}