Files
umbrix/lib/utils/custom_text_form_field.dart

78 lines
2.3 KiB
Dart
Raw Permalink Normal View History

2023-07-06 17:18:41 +03:30
import 'package:flutter/material.dart';
2023-12-11 19:06:05 +03:30
import 'package:flutter/services.dart';
2023-07-06 17:18:41 +03:30
import 'package:flutter_hooks/flutter_hooks.dart';
import 'package:umbrix/utils/text_utils.dart';
2023-07-06 17:18:41 +03:30
import 'package:hooks_riverpod/hooks_riverpod.dart';
class CustomTextFormField extends HookConsumerWidget {
const CustomTextFormField({
super.key,
2023-12-11 19:06:05 +03:30
this.onChanged,
2023-07-06 17:18:41 +03:30
this.validator,
this.controller,
2023-12-11 19:06:05 +03:30
this.inputFormatters,
2023-07-06 17:18:41 +03:30
this.initialValue = '',
this.suffixIcon,
this.label,
this.hint,
2023-09-28 14:03:45 +03:30
this.maxLines,
2023-07-06 17:18:41 +03:30
this.isDense = false,
this.autoValidate = false,
this.autoCorrect = false,
});
2023-12-11 19:06:05 +03:30
final ValueChanged<String>? onChanged;
2023-07-06 17:18:41 +03:30
final String? Function(String? value)? validator;
final TextEditingController? controller;
2023-12-11 19:06:05 +03:30
final List<TextInputFormatter>? inputFormatters;
2023-07-06 17:18:41 +03:30
final String initialValue;
final Widget? suffixIcon;
final String? label;
final String? hint;
2023-09-28 14:03:45 +03:30
final int? maxLines;
2023-07-06 17:18:41 +03:30
final bool isDense;
final bool autoValidate;
final bool autoCorrect;
@override
Widget build(BuildContext context, WidgetRef ref) {
final textController =
controller ?? useTextEditingController(text: initialValue);
final effectiveConstraints =
isDense ? const BoxConstraints(maxHeight: 56) : null;
final effectiveBorder = isDense
? OutlineInputBorder(
borderRadius: BorderRadius.circular(36),
borderSide: BorderSide.none,
)
: null;
return TextFormField(
controller: textController,
textCapitalization: TextCapitalization.sentences,
maxLines: maxLines,
onChanged: onChanged,
textDirection: textController.textDirection,
validator: validator,
2023-12-11 19:06:05 +03:30
textInputAction: TextInputAction.next,
inputFormatters: inputFormatters,
2023-07-06 17:18:41 +03:30
autovalidateMode:
autoValidate ? AutovalidateMode.always : AutovalidateMode.disabled,
autocorrect: autoCorrect,
decoration: InputDecoration(
isDense: true,
label: label != null ? Text(label!) : null,
hintText: hint,
hintStyle: Theme.of(context).textTheme.bodySmall,
constraints: effectiveConstraints,
suffixIcon: suffixIcon,
border: effectiveBorder,
enabledBorder: effectiveBorder,
errorBorder: effectiveBorder,
focusedBorder: effectiveBorder,
focusedErrorBorder: effectiveBorder,
),
);
}
}