无法在文本固定字段中键入文本(sms_autofill: ^2.2.0)

Unable to type text in text pin field(sms_autofill: ^2.2.0)

无法在文本 pin 字段中键入 OTP 代码 (sms_autofill: ^2.2.0) 当定时器打开时,我可以在定时器关闭后写入,调试日志显示“视图不是 EditText”

我声明了 int 来设置时间

Timer? _timer;
int _start = 60;

调用定时器的方法,当otp发送成功时调用此定时器。

  void startTimer() {
    const oneSec = const Duration(seconds: 1);
    _timer = new Timer.periodic(
      oneSec,
      (Timer timer) {
        if (_start == 0) {
          setState(() {
            timer.cancel();
          });
        } else {
          setState(() {
            _start--;
          });
        }
      },
    );
  }

Otp 字段输入 otp

PinFieldAutoFill(
   codeLength: 6,
   decoration: const UnderlineDecoration(
   bgColorBuilder: FixedColorBuilder(Colors.white),
   textStyle: TextStyle(
   fontSize: 22,
   color: Colors.black,
   fontWeight: FontWeight.bold),
   colorBuilder: FixedColorBuilder(Colors.white),),
                currentCode: _code,
                onCodeSubmitted: (code) {
                  setState(() {
                    _code = code;
                  });
                  if (code.length == 6) {
                    setState(() {
                      isLoading2 = true;
                    });
                    handleSignIn();
                  } else {
                    Fluttertoast.showToast(
                        msg: 'Enter Correct Code',
                        backgroundColor: Colors.black.withOpacity(0.95),
                        textColor: Colors.white);
                  }
                },
                onCodeChanged: (code) {
                  if (code!.length == 6) {
                    FocusScope.of(this.context).requestFocus(FocusNode());
                    setState(() {
                      _code = code;
                    });
                  }
                },
              ),

实际上问题出在您的 void startTimer() 函数中,当您第一次调用它时 initiates a Timer.periodic 函数,你每秒调用 setState。因此,屏幕上的任何更改都不会反映出来,因为设置状态会每隔 second.

再次将其设置为默认值 value