Files
umbrix/lib/utils/custom_text_form_field.dart

73 lines
2.2 KiB
Dart
Raw Normal View History

2023-07-06 17:18:41 +03:30
import 'package:flutter/material.dart';
import 'package:flutter_hooks/flutter_hooks.dart';
import 'package:hiddify/utils/text_utils.dart';
import 'package:hooks_riverpod/hooks_riverpod.dart';
class CustomTextFormField extends HookConsumerWidget {
const CustomTextFormField({
super.key,
required this.onChanged,
this.validator,
this.controller,
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,
});
final ValueChanged<String> onChanged;
final String? Function(String? value)? validator;
final TextEditingController? controller;
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,
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,
),
);
}
}