buildTextField method
Implementation
Widget buildTextField(int i, BuildContext context) {
if (_focusNodes[i] == null) {
_focusNodes[i] = FocusNode();
}
if (_textControllers[i] == null) {
_textControllers[i] = TextEditingController();
if (widget.lastPin != null) {
_textControllers[i]!.text = widget.lastPin![i];
}
}
_focusNodes[i]!.addListener(() {
if (_focusNodes[i]!.hasFocus) {}
});
final String lastDigit = _textControllers[i]!.text;
return Container(
height: widget.fieldWidth,
width: widget.fieldWidth,
margin: EdgeInsets.only(right: 10.0),
child: TextField(
autofocus: true,
showCursor: widget.showCursor,
controller: _textControllers[i],
keyboardType: widget.keyboard,
textAlign: TextAlign.center,
style: widget.textStyle,
focusNode: _focusNodes[i],
obscureText: widget.isTextObscure,
decoration: widget.decoration ??
InputDecoration(
counterText: "",
focusedBorder: OutlineInputBorder(
borderRadius: BorderRadius.circular(14),
borderSide: BorderSide(
color: Color(0xfff9ab65),
),
),
disabledBorder: OutlineInputBorder(
borderRadius: BorderRadius.circular(14),
borderSide: BorderSide(
color: Color(0xffececec),
),
),
enabledBorder: OutlineInputBorder(
borderRadius: BorderRadius.circular(14),
borderSide: BorderSide(
color: Color(0xffececec),
),
),
border: OutlineInputBorder(
borderRadius: BorderRadius.circular(14),
borderSide: BorderSide(
color: Color(0xffececec),
),
),
),
onChanged: (String str) {
setState(() {
_pin[i] = str;
});
if (i + 1 != widget.fields) {
_focusNodes[i]!.unfocus();
if (lastDigit != null && _pin[i] == '') {
FocusScope.of(context).requestFocus(_focusNodes[i - 1]);
} else {
FocusScope.of(context).requestFocus(_focusNodes[i + 1]);
}
} else {
_focusNodes[i]!.unfocus();
if (lastDigit != null && _pin[i] == '') {
FocusScope.of(context).requestFocus(_focusNodes[i - 1]);
}
}
if (_pin.every((String? digit) => digit != null && digit != '')) {
widget.onSubmit(_pin.join());
}
},
onSubmitted: (String str) {
if (_pin.every((String? digit) => digit != null && digit != '')) {
widget.onSubmit(_pin.join());
}
},
),
);
}