Flutter 计算在后台完成任务的时间

Flutter count time to complete task in background

正在尝试 运行 在后台设置一个计时器,以向用户显示他们在结果页面上完成测验所花费的时间。

我已尝试使用下面的代码使用秒表,但收到错误消息 'start' was called on null.

  class CardPage extends StatefulWidget {
  static const String id = 'card_page';

  final List<File> favpicz;
  final timer = Stopwatch();

  CardPage({@required this.favpicz});

  @override
  _CardPageState createState() => _CardPageState(favpicz);
}

class _CardPageState extends State<CardPage> with TickerProviderStateMixin {
//animation controllers

  List<File> favpicz;
  Stopwatch timer;

  _CardPageState(this.favpicz);

  @override
  void initState() {
    super.initState();
    timer.start();
  }

  @override
  void dispose() {
    if (timer != null) {
      timer.stop();
      timer = null;
    }
super.dispose();
  }

如您所见,我想在用户到达测验屏幕时启动计时器。然后我想在转换到结果页面的函数上调用 timer.stop()。

在结果页面上,我想将时间表示为格式为 ex 的文本小部件。 3:57

秒表似乎不适合这个,我的大多数计时器搜索都是针对倒计时计时器或使用 Streams 在屏幕上停止观看应用程序,这对于此目的是不必要的。非常感谢帮助找到一个包或 class 向上计数而不是向下计数。

您应该在 StatefulWidget 的状态中初始化 timer

final timer = Stopwatch();

initState() 内初始化 timer :

@override
  void initState() {
    super.initState();
    timer = Stopwatch();
    timer.start();
  }

同时从您的 Stateful class 中删除 timer :

class CardPage extends StatefulWidget {
  static const String id = 'card_page';

  final List<File> favpicz;
  final timer = Stopwatch(); // remove this

  CardPage({@required this.favpicz});

  @override
  _CardPageState createState() => _CardPageState(favpicz);
}