buildTextField method

Widget buildTextField(
  1. int i,
  2. BuildContext context
)

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());
        }
      },
    ),
  );
}