我制作了一個國際象棋時鐘,但只有當您單擊其中一個按鈕時時間才會更新,我想要它,因此時間會不斷更新。按下按鈕后我有 setState() 功能,但沒有其他功能。每 10 秒左右更新一次怎么會這么瘋狂。謝謝。這是我的代碼:
import 'package:flutter/material.dart';
...
Widget build(context) {
return MaterialApp(
home: Scaffold(// this is what creates the page, everything should be inside this cuz everything is inside the page
appBar: AppBar(//what is displayed at the top WOW
title: Text('chess clock'),
),
body: Column(
children: [
Container(
margin: EdgeInsets.all(150.0),
child: RaisedButton(
onPressed: () {
setState((){
if (button1==1){
button1=2;
minus=minus2-minus;
fminus=fminus minus;
print(minus);
divid=DateTime.now().microsecondsSinceEpoch/1000000-start/1000000;
divid.round();
divid=divid-fminus;
minus=DateTime.now().microsecondsSinceEpoch/1000000;
divid=60.0-divid;
}
});
},
child: Text(divid.round().toString()),
)
),
Container(
margin: EdgeInsets.all(150.0),
child: RaisedButton(
onPressed: () {
setState((){
if (button1==2){
button1=1;
minus2=minus-minus2;
fminus2=fminus2 minus2;
divid2=DateTime.now().microsecondsSinceEpoch/1000000-start/1000000;
divid2.round();
divid2=divid2-fminus2;
minus2=DateTime.now().microsecondsSinceEpoch/1000000;
divid2=60.0-divid2;
}
});
},
child: Text(divid2.round().toString()),
...
uj5u.com熱心網友回復:
要獲得完整的解決方案,您應該將 Kauli 的代碼放在您的 initState() 方法中,并在 dispose() 中將其拆除。它看起來像這樣。
我做了一些小改動以滿足解決方案的需要。
編輯:我添加了周圍的 StatefulWidget 類并洗掉了一些令人困惑的剪切和粘貼。您可以使用原始 Scaffold 和其他小部件包裝構建方法。我忽略了這一點,以使答案更清楚一些。
class ChessClock extends StatefulWidget {
@override
_ChessClockState createState() => _ChessClockState();
}
class _ChessClockState extends State<ChessClock> {
// Important to capture the timer object reference
Timer chessClockTimer;
Timer periodicSec() {
// How could this be made to updating every 10th of a second or so.
// Per op question
return Timer.periodic(Duration(milliseconds: 10), (_){
setState((){
if (button1==2){
button1=1;
minus2=minus-minus2;
fminus2=fminus2 minus2;
divid2=DateTime.now().microsecondsSinceEpoch/1000000-start/1000000;
divid2.round();
divid2=divid2-fminus2;
minus2=DateTime.now().microsecondsSinceEpoch/1000000;
divid2=60.0-divid2;
}
});
});
}
@override
void initState() {
super.initState();
chessClockTimer = periodicSec(); // Kauli's code
}
@override
void dispose() {
// Stop the timer
chessClockTimer?.cancel();
// Clean up the timer
chessClockTimer?.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
// Your build method code
}
}
uj5u.com熱心網友回復:
您可以使用 Timer.periodic 來執行此操作
void periodicSec() {
Timer.periodic(Duration(seconds: 1), (_){
setState((){
if (button1==2){
button1=1;
minus2=minus-minus2;
fminus2=fminus2 minus2;
divid2=DateTime.now().microsecondsSinceEpoch/1000000-start/1000000;
divid2.round();
divid2=divid2-fminus2;
minus2=DateTime.now().microsecondsSinceEpoch/1000000;
divid2=60.0-divid2;
}
});
});
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/360803.html
