我使用timer类在特定时间后自动注销,但我得到的方法调用了null错误,我的autologout代码是:
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;
}
}从导致widget的相关错误中调用函数为:
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()函数中使用这个函数之前,我的代码工作得非常好,但是我不知道为什么它会给出这个错误。我试着从_handleUserInteraction()中删除这个_timer.close(),但是没有成功。
请帮帮忙
发布于 2021-06-08 00:52:48
当isActive还没有初始化的时候,它看起来像是在timer上调用的。
试试这个:
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); });
}因为计时器是计时器变量,所以它上的所有方法调用都应该是null safe的,例如: timer?.close(),timer?.isActive ...等
最好将整个项目迁移到零安全性
https://stackoverflow.com/questions/67874638
复制相似问题