marco.pms.mobile/lib/controller/forms/basic_input_controller.dart
2025-04-02 19:11:36 +05:30

158 lines
4.0 KiB
Dart

import 'package:maxdash/controller/my_controller.dart';
import 'package:maxdash/helpers/extensions/date_time_extension.dart';
import 'package:flutter/material.dart';
import 'package:get/get.dart';
enum Gender {
male,
female,
none;
const Gender();
}
enum TextFieldBorderType { outline, underline, none }
class BasicInputController extends MyController {
bool filled = false;
bool disabled = true;
bool readOnly = false;
bool helperText = false;
bool pilled = false;
bool inlineText = false;
bool prefixIcon = false;
bool suffixIcon = false;
FloatingLabelBehavior floatingLabelBehavior = FloatingLabelBehavior.always;
TextFieldBorderType borderType = TextFieldBorderType.outline;
DateTime? selectedDate;
TimeOfDay? selectedTime;
DateTimeRange? selectedDateTimeRange;
DateTime? selectedDateTime;
Gender selectedGender = Gender.male;
void onChangeLabelType(FloatingLabelBehavior value) {
floatingLabelBehavior = value;
update();
}
OutlineInputBorder? get inputBorder {
if (borderType == TextFieldBorderType.underline) {
return null;
}
if (borderType == TextFieldBorderType.none) {
return OutlineInputBorder(
borderRadius: BorderRadius.all(Radius.circular(pilled ? 30 : 8)),
borderSide: BorderSide.none);
}
return OutlineInputBorder(
borderRadius: BorderRadius.all(Radius.circular(pilled ? 30 : 8)),
);
}
void onChangedFilledChecked(bool? value) {
filled = value ?? filled;
update();
}
void onChangedDisabledChecked(bool? value) {
disabled = value ?? disabled;
update();
}
void onChangedReadOnlyChecked(bool? value) {
readOnly = value ?? readOnly;
update();
}
void onChangedHelperTextChecked(bool? value) {
helperText = value ?? helperText;
update();
}
void onChangedPilledChecked(bool? value) {
pilled = value ?? pilled;
update();
}
void onChangedInlineTextChecked(bool? value) {
inlineText = value ?? inlineText;
update();
}
void onChangedPrefixIconChecked(bool? value) {
prefixIcon = value ?? prefixIcon;
update();
}
void onChangedSuffixIconChecked(bool? value) {
suffixIcon = value ?? suffixIcon;
update();
}
void onChangeBorderType(TextFieldBorderType value) {
borderType = value;
if (borderType == TextFieldBorderType.none) {
filled = true;
}
update();
}
Future<void> pickDate() async {
final DateTime? picked = await showDatePicker(
context: Get.context!,
initialDate: selectedDate ?? DateTime.now(),
firstDate: DateTime(2015, 8),
lastDate: DateTime(2101));
if (picked != null && picked != selectedDate) {
selectedDate = picked;
update();
}
}
Future<void> pickTime() async {
final TimeOfDay? picked = await showTimePicker(
context: Get.context!, initialTime: selectedTime ?? TimeOfDay.now());
if (picked != null && picked != selectedTime) {
selectedTime = picked;
update();
}
}
Future<void> pickDateRange() async {
final DateTimeRange? picked = await showDateRangePicker(
context: Get.context!,
initialEntryMode: DatePickerEntryMode.input,
firstDate: DateTime(2015, 8),
lastDate: DateTime(2101));
if (picked != null && picked != selectedDateTimeRange) {
selectedDateTimeRange = picked;
update();
}
}
Future<void> pickDateTime() async {
final DateTime? pickedDate = await showDatePicker(
context: Get.context!,
initialDate: selectedDate ?? DateTime.now(),
firstDate: DateTime(2015, 8),
lastDate: DateTime(2101));
if (pickedDate != null) {
final TimeOfDay? pickedTime = await showTimePicker(
context: Get.context!, initialTime: selectedTime ?? TimeOfDay.now());
if (pickedTime != null) {
selectedDateTime = pickedDate.applied(pickedTime);
update();
}
}
}
void onChangeGender(Gender? value) {
selectedGender = value ?? selectedGender;
update();
}
}