微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

颤振:在计时器上调用关闭函数时没有这样的方法错误

如何解决颤振:在计时器上调用关闭函数时没有这样的方法错误

我正在使用计时器类在特定时间后自动注销,但我在空错误调用了该方法 我的自动注销代码是:

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 举报,一经查实,本站将立刻删除。