TKK_E32232276/lib/ui_custom/custom_textfield.dart

102 lines
2.7 KiB
Dart

import 'package:flutter/material.dart';
class CustomTextField extends StatefulWidget {
final TextEditingController controller;
final String label;
final String? hint;
final IconData? prefixIcon;
final Widget? suffixIcon;
final bool isPassword;
final bool readOnly;
final bool enabled;
final TextInputType keyboardType;
final int maxLines;
final String? Function(String?)? validator;
final void Function(String)? onChanged;
final VoidCallback? onTap;
final Color borderColor;
final Color focusColor;
const CustomTextField({
super.key,
required this.controller,
required this.label,
this.hint,
this.prefixIcon,
this.suffixIcon,
this.isPassword = false,
this.readOnly = false,
this.enabled = true,
this.keyboardType = TextInputType.text,
this.maxLines = 1,
this.validator,
this.onChanged,
this.onTap,
this.borderColor = Colors.grey,
this.focusColor = Colors.blue,
});
@override
State<CustomTextField> createState() => _CustomTextFieldState();
}
class _CustomTextFieldState extends State<CustomTextField> {
bool obscureText = true;
@override
Widget build(BuildContext context) {
return TextFormField(
controller: widget.controller,
obscureText: widget.isPassword ? obscureText : false,
readOnly: widget.readOnly,
enabled: widget.enabled,
keyboardType: widget.keyboardType,
maxLines: widget.isPassword ? 1 : widget.maxLines,
validator: widget.validator,
onChanged: widget.onChanged,
onTap: widget.onTap,
decoration: InputDecoration(
labelText: widget.label,
hintText: widget.hint,
prefixIcon: widget.prefixIcon != null
? Icon(widget.prefixIcon)
: null,
suffixIcon: widget.isPassword
? IconButton(
icon: Icon(
obscureText
? Icons.visibility_off
: Icons.visibility,
),
onPressed: () {
setState(() {
obscureText = !obscureText;
});
},
)
: widget.suffixIcon,
border: OutlineInputBorder(
borderRadius: BorderRadius.circular(12),
borderSide: BorderSide(color: widget.borderColor),
),
enabledBorder: OutlineInputBorder(
borderRadius: BorderRadius.circular(12),
borderSide: BorderSide(color: widget.borderColor),
),
focusedBorder: OutlineInputBorder(
borderRadius: BorderRadius.circular(12),
borderSide: BorderSide(color: widget.focusColor, width: 2),
),
),
);
}
}