Files
Regroup/lib/Utils/Common/CommonDropdown.dart
2024-05-23 15:43:13 +05:30

138 lines
4.3 KiB
Dart

import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:remove_emoji_input_formatter/remove_emoji_input_formatter.dart';
// ignore: must_be_immutable
class CommonDropdownfield extends StatefulWidget {
CommonDropdownfield(
{Key? key,
this.validator,
this.inputFormatters,
required this.hintText,
required this.validatorText,
this.textEditingController,
this.leadingIcon,
this.readonly = false,
this.textCapital = false,
this.isInputPassword = false,
this.outlineColor = Colors.black,
this.texttype,
this.onInput,
this.onTap,
this.maxlines = 1,
this.suffixIcon})
: super(key: key);
dynamic validator;
final TextEditingController? textEditingController;
final String hintText;
final String validatorText;
final Widget? leadingIcon;
final bool isInputPassword;
final bool readonly;
final bool textCapital;
final dynamic inputFormatters;
final Color outlineColor;
final TextInputType? texttype;
Function(String)? onInput;
final VoidCallback? onTap;
final int maxlines;
final Widget? suffixIcon;
@override
State<CommonDropdownfield> createState() => _CommonDropdownfieldState();
}
class _CommonDropdownfieldState extends State<CommonDropdownfield> {
late bool obscureText;
var emojiFormatter = RemoveEmojiInputFormatter();
@override
void initState() {
super.initState();
obscureText = widget.isInputPassword;
}
Widget build(BuildContext context) {
List<TextInputFormatter> allFormatters = [emojiFormatter];
if (widget.inputFormatters != null) {
allFormatters.addAll(widget.inputFormatters);
}
return TextFormField(
textCapitalization: widget.textCapital
? TextCapitalization.characters
: TextCapitalization.none,
onTap: widget.onTap,
style: TextStyle(
fontSize: 16,
),
readOnly: widget.readonly,
maxLines: widget.maxlines,
cursorColor: const Color(0xFF1B8DC9),
autovalidateMode: AutovalidateMode.onUserInteraction,
obscureText: obscureText,
controller: widget.textEditingController,
decoration: InputDecoration(
errorStyle:
TextStyle(fontSize: 13, color: Color.fromARGB(255, 245, 130, 122)),
contentPadding: EdgeInsets.symmetric(vertical: 10, horizontal: 20),
filled: true,
fillColor: Color(0xFFFFF3E4),
border: OutlineInputBorder(
borderRadius: BorderRadius.circular(5),
borderSide:
BorderSide(color: Color.fromRGBO(232, 198, 159, 0.50), width: 1),
),
enabledBorder: OutlineInputBorder(
borderRadius: BorderRadius.circular(5),
borderSide: BorderSide(color: Color(0xFFDBDBDB), width: 1),
),
focusedBorder: OutlineInputBorder(
borderRadius: BorderRadius.circular(5),
borderSide: BorderSide(color: Color(0xFF707070), width: 1),
),
errorBorder: OutlineInputBorder(
borderRadius: BorderRadius.circular(5),
borderSide: const BorderSide(color: Colors.red, width: 1),
),
focusedErrorBorder: OutlineInputBorder(
borderRadius: BorderRadius.circular(5),
borderSide: const BorderSide(color: Colors.red, width: 1),
),
hintStyle: TextStyle(
color: Color(0xFF737373),
fontSize: 14,
fontWeight: FontWeight.w400,
fontFamily: "DM Sans"),
hintText: widget.hintText,
prefixIconColor: Color(0xFF737373),
prefixIcon: widget.leadingIcon == null
? null
: Padding(
padding: const EdgeInsets.only(left: 14, right: 14),
child: widget.leadingIcon!,
),
suffixIcon: widget.suffixIcon == null
? null
: Padding(
padding: const EdgeInsets.only(left: 14, right: 14),
child: widget.suffixIcon!,
),
),
keyboardType: widget.texttype,
validator: widget.validator ??
(value) {
if (value == null || value.isEmpty) {
return "Empty value";
}
return null;
},
inputFormatters: allFormatters,
onChanged: (value) {
widget.onInput?.call(value);
},
);
}
}