LoginSignup
7
5

More than 3 years have passed since last update.

[Flutter]Timer.periodicで現在時刻を表示したらエラーが出続けた

Last updated at Posted at 2020-10-04

Timer.periodicでエラー

Flutter開発の勉強中、現在時刻の表示を行った後に画面遷移をしたら、エラーが出力され続ける現象に遭遇しました。
なかなか困ってしまったので、忘れないように対処法のメモ書きを残します。
dispose内でちゃんとキャンセルを書かないと停止されず、裏で動き続けちゃう様です。

timer.dart
import 'package:flutter/material.dart';
import 'package:intl/intl.dart';
import 'dart:async';

class TimerPage extends StatefulWidget {
  @override
  State<StatefulWidget> createState() {
    return _TimerState();
  }
}

class _TimerState extends State<TimerPage> {
  String _nowtime = '';
  var formatter = DateFormat('yyyy/MM/dd HH:mm:ss');
  var _timer;

  @override
  void initState() {
    super.initState();
    _timer = Timer.periodic(
      // 定期実行する間隔の設定.
      Duration(milliseconds: 100),
      // 定期実行関数.
      _onTimer,
    );
  }

  @override
  void dispose(){
    // 破棄される時に停止する.
    _timer.cancel();
    super.dispose();
  }

  void _onTimer(Timer timer) {
    var now = DateTime.now();
    var formatterTime = formatter.format(now);
    setState(() {
      _nowtime = formatterTime;
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text('TimerPage')),
      body: Container(
        padding: EdgeInsets.all(20),
        child: ListView(
          children: <Widget>[
            Container(
              child: Text('現在時刻:\n' + _nowtime),
            ),
          ],
        ),
      ),
    );
  }
}

プレビュー

画面遷移後もエラーが出る事は無くなりました。
timer.png

参考

7
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
5