103 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			Dart
		
	
	
	
	
	
			
		
		
	
	
			103 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			Dart
		
	
	
	
	
	
import "package:moxxyv2/ui/constants.dart";
 | 
						|
 | 
						|
import "package:flutter/material.dart";
 | 
						|
 | 
						|
class CustomTextField extends StatelessWidget {
 | 
						|
  final double cornerRadius;
 | 
						|
  final String? errorText;
 | 
						|
  final String? labelText;
 | 
						|
  final String? hintText;
 | 
						|
  final Widget? suffix;
 | 
						|
  final String? suffixText;
 | 
						|
  final Widget? suffixIcon;
 | 
						|
  final Widget? topWidget;
 | 
						|
  final EdgeInsetsGeometry contentPadding;
 | 
						|
  final bool enabled;
 | 
						|
  final bool obscureText;
 | 
						|
  final bool isDense;
 | 
						|
  final bool enableIMEFeatures; // suggestions and autocorrect
 | 
						|
  final int maxLines;
 | 
						|
  final int minLines;
 | 
						|
  final TextEditingController? controller;
 | 
						|
  final ValueChanged<String>? onChanged;
 | 
						|
 | 
						|
  const CustomTextField({
 | 
						|
      required this.cornerRadius,
 | 
						|
      this.errorText,
 | 
						|
      this.labelText,
 | 
						|
      this.hintText,
 | 
						|
      this.suffix,
 | 
						|
      this.suffixText,
 | 
						|
      this.suffixIcon,
 | 
						|
      this.topWidget,
 | 
						|
      this.enabled = true,
 | 
						|
      this.obscureText = false,
 | 
						|
      this.maxLines = 1,
 | 
						|
      this.minLines = 1,
 | 
						|
      this.controller,
 | 
						|
      this.onChanged,
 | 
						|
      this.isDense = false,
 | 
						|
      this.contentPadding = textfieldPaddingRegular,
 | 
						|
      this.enableIMEFeatures = true,
 | 
						|
      Key? key
 | 
						|
  }) : super(key: key);
 | 
						|
  
 | 
						|
  @override
 | 
						|
  Widget build(BuildContext context) {
 | 
						|
    return Column(
 | 
						|
      children: [
 | 
						|
        Container(
 | 
						|
          decoration: BoxDecoration(
 | 
						|
            borderRadius: BorderRadius.circular(cornerRadius),
 | 
						|
            border: Border.all(
 | 
						|
              width: 1,
 | 
						|
              color: Colors.purple
 | 
						|
            )
 | 
						|
          ),
 | 
						|
          child: Column(
 | 
						|
            crossAxisAlignment: CrossAxisAlignment.stretch,
 | 
						|
            children: [
 | 
						|
              ...(topWidget != null ? [ topWidget! ] : []),
 | 
						|
              TextField(
 | 
						|
                maxLines: maxLines,
 | 
						|
                minLines: minLines,
 | 
						|
                obscureText: obscureText,
 | 
						|
                enabled: enabled,
 | 
						|
                controller: controller,
 | 
						|
                onChanged: onChanged,
 | 
						|
                enableSuggestions: enableIMEFeatures,
 | 
						|
                autocorrect: enableIMEFeatures,
 | 
						|
                decoration: InputDecoration(
 | 
						|
                  labelText: labelText,
 | 
						|
                  hintText: hintText,
 | 
						|
                  border: InputBorder.none,
 | 
						|
                  contentPadding: contentPadding,
 | 
						|
                  suffixIcon: suffixIcon,
 | 
						|
                  suffix: suffix,
 | 
						|
                  suffixText: suffixText,
 | 
						|
                  isDense: isDense
 | 
						|
                )
 | 
						|
              )
 | 
						|
            ]
 | 
						|
          )
 | 
						|
        ),
 | 
						|
        Visibility(
 | 
						|
          visible: errorText != null,
 | 
						|
          child: Padding(
 | 
						|
            padding: const EdgeInsets.all(2.0),
 | 
						|
            child: Align(
 | 
						|
              alignment: Alignment.centerLeft,
 | 
						|
              child: Text(
 | 
						|
                errorText ?? "",
 | 
						|
                style: const TextStyle(
 | 
						|
                  color: Colors.red
 | 
						|
                )
 | 
						|
              )
 | 
						|
            )
 | 
						|
          )
 | 
						|
        ) 
 | 
						|
      ]
 | 
						|
    );
 | 
						|
  }
 | 
						|
}
 |