您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

Flutter:测试期间的计时器问题

Flutter:测试期间的计时器问题

问题是创建计时器会创建必须处置的资源,因此您的小部件实际上是有状态的,而不是无状态的。具体来说,该build方法可以每秒调用60次(如果平台为120fps ,则可以调用更多次)。少就是优化。

您的代码中有一个非常关键的错误-该build方法每次调用都会创建一个新的Timer。而且由于您的计时器永远不会取消,因此您可以将数百个或数千个事件调度到商店。

为了避免出现这种情况,该框架提供了一个State类,并带有initStateanddispose生命周期。该框架承诺,如果它重建您的小部件,它将不会调用initState多次,并且会始终调用dispose。这样,您就可以一次创建一个计时器,并在随后的调用中重新使用它build

例如,您可以将您的大部分逻辑移至“州”,如下所示。将refreshRate保留在小部件上,您甚至还可以使用didUpdateWidget生命周期取消和更新计时器。

class AnniversaryHomePage extends StatefulWidget {
  @override
  State createState() => new AnniversaryHomePageState();
}

class AnniversaryHomePageState extends State<AnniversaryHomePage> {
  Timer _timer;

  @override
  void initState() {
    _timer = new Timer.periodic(widget.refreshRate, 
      (Timer timer) => _updateDisplayTime(inheritedWidget));
    super.initState();
  }

  @override
  void dispose() {
    _timer.cancel();
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    ...
  }
}
其他 2022/1/1 18:19:48 有613人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶