无法在文本固定字段中键入文本(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
无法在文本 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