前提・実現したいこと
Flutter初心者で不明点失礼致します。
表題の通りCustomPaintのpaintをTimerで更新したいものの
ボタンを押すとpaintが呼ばれ更新されるのですが、
TimerのFunction内でボタンと同じコードを書いてもpaintが呼ばれなく
解決方法が分からず困っております。
コードは以下のような感じです。
該当のソースコード
dart
1import 'dart:async'; 2import 'package:flutter/cupertino.dart'; 3import 'package:flutter/material.dart'; 4 5class PaintScene extends StatefulWidget { 6 PaintScene({Key key, this.title}) : super(key: key); 7 final String title; 8 9 10 _PaintScene createState() => _PaintScene(); 11} 12 13class _PaintScene extends State<PaintScene> { 14 _MyPainter painter = new _MyPainter(); 15 16 17 Widget build(BuildContext context) { 18 return Scaffold( 19 appBar: AppBar( 20 title: Text( 21 'タイトルタイトルタイト', 22 overflow: TextOverflow.ellipsis, 23 ), 24 ), 25 body: Container( 26 child: CustomPaint( 27 painter: painter, 28 ), 29 ), 30 floatingActionButton: FloatingActionButton( 31 onPressed: (){ 32 //painter.countUp(); 33 startTimer(); 34 }, 35 ), 36 ); 37 } 38 39 void startTimer() { 40 Timer.periodic( Duration(seconds: 1), (Timer timer) { 41 painter.countUp(); 42 }); 43 } 44 45} 46 47class _MyPainter extends CustomPainter { 48 int _count = 0; 49 50 void countUp(){ 51 _count ++; 52 print('countUp'); 53 } 54 55 56 void paint(Canvas canvas, Size size) { 57 // 描画 58 print('paint:' + _count.toString()); 59 } 60 61 62 bool shouldRepaint(CustomPainter oldDelegate) { 63 return true; 64 } 65} 66
試したこと
onPressedの中のpainter.countUp();を呼ぶと
countUp paint:0 paint:0 paint:0 paint:0
のような形で思ったようにpaintが呼ばれて出力されるのですが、
onPressedの中のpainter.startTimer();のほうを呼ぶと
countUp countUp countUp countUp
のように、メソッドは呼ばれているもののpaintが呼ばれていない感じになり
何が問題なのかが分からず困っておりまして、ご教示頂ければ大変助かります。
補足情報(FW/ツールのバージョンなど)
Flutter 1.19.0-4.2.pre
Tools • Dart 2.9.0 (build 2.9.0-14.1.beta)
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/07/04 11:11