import 'package:aman_kassa_flutter/shared/app_colors.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:aman_kassa_flutter/shared/shared_styles.dart'; import 'package:aman_kassa_flutter/shared/ui_helpers.dart'; import 'note_text.dart'; class InputField extends StatefulWidget { final TextEditingController controller; final TextInputType textInputType; final bool password; final bool isReadOnly; final String placeholder; final String validationMessage; final Function enterPressed; final bool smallVersion; final FocusNode fieldFocusNode; final FocusNode nextFocusNode; final TextInputAction textInputAction; final bool multiline; final String additionalNote; final Function(String) onChanged; final TextInputFormatter formatter; final String initialValue; final String labelText; InputField( { this.controller, @required this.placeholder, this.enterPressed, this.fieldFocusNode, this.nextFocusNode, this.additionalNote, this.onChanged, this.formatter, this.initialValue, this.validationMessage, this.textInputAction = TextInputAction.next, this.textInputType = TextInputType.text, this.password = false, this.isReadOnly = false, this.multiline = false, this.smallVersion = false, this.labelText}); @override _InputFieldState createState() => _InputFieldState(); } class _InputFieldState extends State { bool isPassword; double fieldHeight = 55; @override void initState() { super.initState(); isPassword = widget.password; } @override Widget build(BuildContext context) { return Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ if (widget.labelText != null) NoteText(widget.labelText), Container( //height: widget.smallVersion ? 40 : fieldHeight, constraints: BoxConstraints(minHeight: widget.smallVersion ? 40 : fieldHeight), alignment: Alignment.centerLeft, padding: fieldPadding, decoration: widget.isReadOnly ? disabledFieldDecortaion : fieldDecortaion, child: Row( children: [ Expanded( child: TextFormField( style: TextStyle( color: textColor ), controller: widget.controller, keyboardType: widget.textInputType, focusNode: widget.fieldFocusNode, textInputAction: widget.textInputAction, maxLines: widget.multiline ? null : 1, onChanged: widget.onChanged, initialValue: widget.initialValue, inputFormatters: widget.formatter != null ? [widget.formatter] : null, onEditingComplete: () { if (widget.enterPressed != null) { FocusScope.of(context).requestFocus(FocusNode()); widget.enterPressed(); } }, onFieldSubmitted: (value) { if (widget.nextFocusNode != null) { widget.nextFocusNode.requestFocus(); } }, obscureText: isPassword, readOnly: widget.isReadOnly, decoration: InputDecoration.collapsed( hintText: widget.placeholder, hintStyle: TextStyle(fontSize: widget.smallVersion ? 12 : 15, color: textColorLight)), ), ), GestureDetector( onTap: () => setState(() { isPassword = !isPassword; }), child: widget.password ? Container( width: fieldHeight, height: fieldHeight, alignment: Alignment.center, child: Icon(isPassword ? Icons.visibility : Icons.visibility_off, color: textColor)) : Container(), ), ], ), ), if (widget.validationMessage != null) NoteText( widget.validationMessage, color: Colors.red, ), if (widget.additionalNote != null) verticalSpace(5), if (widget.additionalNote != null) NoteText(widget.additionalNote), verticalSpaceSmall ], ); } }