首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >flutter:在计时器上调用close函数时没有这样的方法错误

flutter:在计时器上调用close函数时没有这样的方法错误
EN

Stack Overflow用户
提问于 2021-06-07 23:38:51
回答 1查看 200关注 0票数 0

我使用timer类在特定时间后自动注销,但我得到的方法调用了null错误,我的autologout代码是:

代码语言:javascript
复制
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的相关错误中调用函数为:

代码语言:javascript
复制
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,

错误是:

代码语言:javascript
复制
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(),但是没有成功。

请帮帮忙

EN

回答 1

Stack Overflow用户

发布于 2021-06-08 00:52:48

isActive还没有初始化的时候,它看起来像是在timer上调用的。

试试这个:

代码语言:javascript
复制
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 ...等

最好将整个项目迁移到零安全性

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67874638

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档