Flutterを使ってスマホアプリでストップウォッチを作っており、お試しとして500ミリ秒ずつ経過時間を画面に表示することにしました。
すると経過時間に1000分の1秒の誤差が発生してしまいます。時々100分の1秒の誤差も発生します。
下記画像ですと6ミリ秒の誤差が発生しています。
この誤差をなくすテクニックはありますか?
main.dart
Dart
1import 'package:flutter/material.dart'; 2import 'time.dart'; 3import 'button.dart'; 4 5void main() { 6 runApp(MyApp()); 7} 8 9class MyApp extends StatelessWidget { 10 11 Widget build(BuildContext context) { 12 return MaterialApp( 13 title: 'タイトルですよ', 14 home: Scaffold( 15 appBar: AppBar( 16 title: Text('appBarですよ'), 17 ), 18 body: Center( 19 child: Column( 20 mainAxisSize: MainAxisSize.min, 21 children: <Widget>[ 22 Padding( 23 padding: EdgeInsets.all(50.0), 24 child: Clock(), 25 ), 26 MyButton(), 27 ], 28 ))), 29 ); 30 } 31} 32
button.dart
Dart
1import 'package:flutter/material.dart'; 2 3class MyButton extends StatefulWidget { 4 5 _MyButtonState createState() => _MyButtonState(); 6} 7 8class _MyButtonState extends State<MyButton> { 9 bool _pressAttention = true; 10 11 void _pressButton() { 12 setState(() { 13 _pressAttention = !_pressAttention; 14 }); 15 } 16 17 18 Widget build(BuildContext context) { 19 return ButtonTheme( 20 minWidth: 100.0, 21 height: 100.0, 22 child: RaisedButton( 23 onPressed: _pressButton, 24 child: _pressAttention ? Text('Start', style: TextStyle(fontSize: 30.0),) : Text('Stop', style: TextStyle(fontSize: 30.0),), 25 color: _pressAttention ? Colors.blue : Colors.red, 26 shape: CircleBorder( 27 side: BorderSide( 28 color: Colors.black, 29 width: 1.0, 30 style: BorderStyle.solid, 31 ), 32 ), 33 )); 34 } 35}
time.dart
Dart
1import 'package:flutter/material.dart'; 2import 'package:intl/intl.dart'; 3import 'dart:async'; 4 5class Clock extends StatefulWidget { 6 7 State<StatefulWidget> createState() { 8 return _ClockState(); 9 } 10} 11 12class _ClockState extends State<Clock> { 13 Stopwatch s = Stopwatch(); 14 String _time = ''; 15 16 17 void initState() { 18 s.start(); 19 Timer.periodic( 20 Duration(milliseconds: 500), 21 _onTimer, 22 ); 23 super.initState(); 24 } 25 26 void _onTimer(Timer timer) { 27 setState(() => _time = '${s.elapsedMilliseconds}'); 28 } 29 30 31 Widget build(BuildContext context) { 32 return Text( 33 _time, 34 style: TextStyle(fontSize: 30.0), 35 ); 36 } 37}
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/09/07 12:50
2020/09/07 15:07 編集