我對 flutter 編程有點陌生,所以我正在嘗試創建一些基本的東西來學習。目前,我正在嘗試創建一個特定日期的倒計時串列。沒什么特別的,日期是通過 firestore 檢索的,然后顯示在串列中。但是,我遇到了一個小問題:
所有日期都在同一時間開始,現在是 00:00:00,這意味著它們在倒計時中的秒數應該始終相同。事實并非如此。我本周早些時候發布了這個問題,問題是我總是為 DateTime.now() 使用一個新值,所以我通過在主小部件中創建一個新變數并將其傳遞給倒計時來“解決”該部分。我在這個例子中使用了毫秒和微秒,因為一切都加載得更快。但是正如您所看到的,現在磨/微/秒很好地對齊(來自手機的影像),但它不再倒計時了。所以我正在重新發布,但現在可以在此處找到 dartpad 中的可驗證示例。此代碼也應該可用于在本地計算機上復制問題。
如果我重新加載應用程式,它會更新,因為 currentTime 當然會獲得新值。
有人可以幫助我朝著正確的方向前進嗎?
uj5u.com熱心網友回復:
一旦你通過currentTime它就保持不變。因為currentTime只初始化一次。
DateTime currentTime = DateTime.now();
并使用
CountdownWidget(
startDate: DateTime(2023, 1), currentTime: currentTime),
該currentTime值永遠不會發生變化,包括CountdownWidget小部件。因此用戶界面不更新。
您可以更改 from parent widget 的值并以當前方式CountdownWidget傳遞 instance 。CountdownWidget
解決方案1: 解決方案將是
class _MyHomePageState extends State<MyHomePage> {
DateTime currentTime = DateTime.now();
@override
void initState() {
super.initState();
Timer.periodic(Duration(seconds: 1), (timer) {
currentTime = DateTime.now();
setState(() {});
});
}
它每秒更改currentTime一次并傳遞值,然后更新父小部件。
解決方案0:
另一個解決方案將處理更新CountdownWidget
class CountdownWidgetState extends State<CountdownWidget> {
Timer? timer;
late DateTime currentTime = widget.currentTime;
@override
void initState() {
super.initState();
timer = Timer.periodic(const Duration(microseconds: 1), (timer) {
currentTime = DateTime.now();
setState(() {});
});
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/537206.html
標籤:扑镖约会时间计时器倒数
上一篇:Flutter添加Keytool
