我有一個Text()小部件,將 a 顯示DateTime為String. 這個Text()小部件包含一個應該更新一天的GestureDetecture()地方:onTapDateTime
GestureDetector(
child: File2(
dateTime: date,
key: Key(date.toString()),
),
onTap: () {
setState(() {
// This is adding seconds not days
date = date.add(const Duration(days: 1));
});
},
),
但是,盡管我正在這樣做,但日期并沒有更新一天:
date = date.add(const Duration(days: 1));
但是它會更新幾秒鐘。為什么1天不更新?
我嘗試了什么:
使用Key()
代碼:
file_1.dart:
import 'package:flutter/material.dart';
import 'file_2.dart';
void main() {
runApp(File1());
}
class File1 extends StatefulWidget {
const File1({Key? key}) : super(key: key);
@override
State<File1> createState() => _File1State();
}
class _File1State extends State<File1> {
@override
Widget build(BuildContext context) {
DateTime date = DateTime.now();
return MaterialApp(
home: Scaffold(
body: Center(
child: GestureDetector(
child: File2(
dateTime: date,
key: Key(date.toString()),
),
onTap: () {
setState(() {
// This is adding seconds not days
date = date.add(const Duration(days: 1));
});
},
),
),
),
);
}
}
file_2.dart:
import 'package:flutter/material.dart';
class File2 extends StatelessWidget {
DateTime dateTime;
File2({Key? key, required this.dateTime}) : super(key: key);
@override
Widget build(BuildContext context) {
return Text(dateTime.toString());
}
}
Text()單擊File21 天后如何更新GestureDetector()?我還需要使用狀態管理
setState()嗎?
uj5u.com熱心網友回復:
問題
發生此錯誤只是因為您在構建方法的開頭有這一行:DateTime date = DateTime.now();。
這是您的代碼中發生的事情的作業流程:
- 您將日期值設定為
DateTime.now()構建方法的開頭。 - 此當前日期值在您的 UI 中呈現。
- 您觸發該功能以更新您的日期。
- 1 天添加到日期。
- 重要提示:第?? 4 步會觸發您的小部件的重建,因此會再次執行第 1 步。
作為第 5 步的結果,日期值只是暫時更新,然后DateTime.now()在 UI 中呈現。
解決方案
date在您的 State 類中而不是在 build 方法中啟動值。這樣,您的date值不會被 Widget 重建覆寫:
class _File1State extends State<File1> {
DateTime date = DateTime.now(); // <-- Initiate the value here
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
body: Center(
child: GestureDetector(
child: File2(
dateTime: date,
key: Key(date.toString()),
),
onTap: () {
setState(() {
// This is adding seconds not days
date = date.add(const Duration(days: 1));
});
},
),
),
),
);
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/452705.html
上一篇:在python中獲取GMT時間戳
下一篇:根據資料范圍分配會計年度
