如何解决颤振:在计时器上调用关闭函数时没有这样的方法错误
我正在使用计时器类在特定时间后自动注销,但我在空错误时调用了该方法 我的自动注销代码是:
import 'dart:async';
import 'package:cornershop_tech_1/controller/logoutController.dart';
class Autologout{
logout logout=new logout();
Timer _timer;
void initializeTimer(context) {
if (!_timer.isActive) {
_timer= Timer(Duration(seconds: 300),() {
print('timer Initialized');
logout.logoutUser(context); });
}
else {
_timer.cancel();
_timer= Timer(Duration(seconds: 300),() {
print('timer Initialized');
logout.logoutUser(context); });
}
}
bool handleUserInteraction(context,[_]) {
if (!_timer.isActive) {
return false;
}
_timer.cancel();
initializeTimer(context);
return true;
}
}
Autologout autologout = new Autologout();
@override
void initState() {
// Todo: implement initState
super.initState();
autologout.initializeTimer(context);
getPrefs();
}
void _setAutologout([_]){
autologout.handleUserInteraction(context,[_]);
}
@override
Widget build(BuildContext context) {
return GestureDetector(
onTap: _setAutologout,onPanDown: _setAutologout,onScaleStart: _setAutologout,
错误是:
NoSuchMethodError: method not found: 'b' on null
js_primitives.dart:47 at lr.ku (http://localhost:51981/main.dart.js:52059:28)
js_primitives.dart:47 at Jk.SN (http://localhost:51981/main.dart.js:57212:9)
js_primitives.dart:47 at Object.eval (eval at be_ (http://localhost:51981/main.dart.js:4370:8),<anonymous>:3:37)
js_primitives.dart:47 at a7I.$0 (http://localhost:51981/main.dart.js:71691:31)
js_primitives.dart:47 at kR.Xl (http://localhost:51981/main.dart.js:71865:9)
js_primitives.dart:47 at kR.eM (http://localhost:51981/main.dart.js:71869:30)
js_primitives.dart:47 at kR.a9X (http://localhost:51981/main.dart.js:71665:3)
js_primitives.dart:47 at kR.jy (http://localhost:51981/main.dart.js:71603:3)
js_primitives.dart:47 at xZ.acJ (http://localhost:51981/main.dart.js:93512:14)
js_primitives.dart:47 at Object.eval (eval at be_ (http://localhost:51981/main.dart.js:4370:8),<anonymous>:3:37)
_timer.close()
肯定会出现此错误,因为在 _initializeTimer()
函数中使用此函数之前,我的代码运行良好,但我不知道为什么会出现此错误。我尝试从 _timer.close()
中删除此 _handleUserInteraction()
,但没有成功。
请帮忙
解决方法
似乎 isActive
在尚未初始化时调用了计时器。
试试这个:
if (!(_timer?.isActive == true)) {
_timer = Timer(Duration(seconds: 300),() {
print('timer Initialized');
logout.logOutUser(context); });
}
else {
_timer?.cancel();
_timer = Timer(Duration(seconds: 300),() {
print('timer Initialized');
logout.logOutUser(context); });
}
因为计时器是 nullable
变量,所以它的所有方法调用都应该是 null safe
例如:timer?.close()、timer?.isActive ...等
最好将整个项目迁移到空安全
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。