flutter 常用组件封装-TextField

450 阅读1分钟

对TextField组件进行二次封装

class CTGTextField extends StatelessWidget {

final String? hintText;  //hint,默认为空

final Widget? prefixIcon; //左icon图标

final Widget? suffixIcon; //右icon图标

final bool obscureText; //是否明文

final TextEditingController controller;

final TextInputType keyboardType; //键盘类型

final TextInputAction? textInputAction; //输入框类型

final FocusNode? focusNode;

final Function(String)? onSubmitted;

final Function(String)? onChanged;

final bool autofocus;

final bool enabled;

final InputBorder? border;

final InputBorder? enabledBorder;

final InputBorder? focusedBorder;

final EdgeInsetsGeometry? contentPadding;

final TextStyle? style; //文本内容样式

final TextStyle? hintStyle; //hint样式

final int? maxLength; //可输入最大长度

const CTGTextField({

Key? key,

this.hintText,

this.prefixIcon,

this.suffixIcon,

this.obscureText = false,

required this.controller,

this.keyboardType = TextInputType.text,

this.textInputAction,

this.focusNode,

this.onSubmitted,

this.onChanged,

this.autofocus = false,

this.enabled = true,

this.border,

this.enabledBorder,

this.focusedBorder,

this.contentPadding,

this.style =

const TextStyle(color: AppColors.color_333, fontSize: AppFonts.font_15),

this.hintStyle =

const TextStyle(color: AppColors.color_999, fontSize: AppFonts.font_15),

this.maxLength,

}) : super(key: key);

  
@override

Widget build(BuildContext context) {

return TextField(

controller: controller,

keyboardType: keyboardType,

textInputAction: textInputAction,

focusNode: focusNode,

onSubmitted: onSubmitted,

onChanged: onChanged,

autofocus: autofocus,

enabled: enabled,

obscureText: obscureText,

style: style,

inputFormatters: [

LengthLimitingTextInputFormatter(maxLength),

],

decoration: InputDecoration(

border: border ?? const OutlineInputBorder(borderSide: BorderSide.none),

enabledBorder: enabledBorder ??

const OutlineInputBorder(borderSide: BorderSide.none),

focusedBorder: focusedBorder ??

const OutlineInputBorder(borderSide: BorderSide.none),

hintText: hintText,

prefixIcon: prefixIcon,

suffixIcon: suffixIcon,

contentPadding: EdgeInsets.zero,

hintStyle: hintStyle,

),

);

}

}