您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符
 
 
 
 

92 行
2.4 KiB

  1. import 'package:flutter/material.dart';
  2. class CustomTextFormField extends StatelessWidget {
  3. final OutlineInputBorder? shape;
  4. final EdgeInsetsGeometry? padding;
  5. final String? variant;
  6. final TextStyle? fontStyle;
  7. final Alignment? alignment;
  8. final double? width;
  9. final EdgeInsetsGeometry? margin;
  10. final TextEditingController? controller;
  11. final FocusNode? focusNode;
  12. final bool? isObscureText;
  13. final TextInputAction? textInputAction;
  14. final TextInputType? textInputType;
  15. final int? maxLines;
  16. final String? hintText;
  17. final Widget? prefixIcon;
  18. final Widget? suffixIcon;
  19. final BoxConstraints? prefixIconConstraints;
  20. final BoxConstraints? suffixIconConstraints;
  21. final FormFieldValidator<String>? validator;
  22. final InputDecoration decoration;
  23. CustomTextFormField({
  24. this.shape,
  25. this.padding,
  26. this.variant,
  27. this.fontStyle,
  28. this.alignment,
  29. this.width,
  30. this.margin,
  31. this.controller,
  32. this.focusNode,
  33. this.isObscureText = false,
  34. this.textInputAction = TextInputAction.next,
  35. this.textInputType = TextInputType.text,
  36. this.maxLines,
  37. this.hintText,
  38. this.prefixIcon,
  39. this.prefixIconConstraints,
  40. this.suffixIcon,
  41. this.suffixIconConstraints,
  42. this.validator,
  43. this.decoration = const InputDecoration(),
  44. });
  45. @override
  46. Widget build(BuildContext context) {
  47. return alignment != null
  48. ? Align(
  49. alignment: alignment!,
  50. child: _buildTextFormFieldWidget(),
  51. )
  52. : _buildTextFormFieldWidget();
  53. }
  54. Widget _buildTextFormFieldWidget() {
  55. return Container(
  56. width: width ?? double.maxFinite,
  57. margin: margin,
  58. child: TextFormField(
  59. controller: controller,
  60. focusNode: focusNode,
  61. style: fontStyle,
  62. obscureText: isObscureText!,
  63. textInputAction: textInputAction!,
  64. keyboardType: textInputType!,
  65. maxLines: maxLines ?? 1,
  66. decoration: _buildDecoration(),
  67. validator: validator,
  68. ),
  69. );
  70. }
  71. InputDecoration _buildDecoration() {
  72. return InputDecoration(
  73. hintText: hintText,
  74. hintStyle: fontStyle,
  75. border: shape ?? OutlineInputBorder(
  76. borderRadius: BorderRadius.circular(10),
  77. borderSide: BorderSide(width: 2),
  78. ),
  79. contentPadding: padding,
  80. prefixIcon: prefixIcon,
  81. prefixIconConstraints: prefixIconConstraints,
  82. suffixIcon: suffixIcon,
  83. suffixIconConstraints: suffixIconConstraints,
  84. );
  85. }
  86. }