為一個簡單的問題道歉,但我剛開始我的 Dart/Flutter 愛好并遇到了以下問題:我想要一個簡單的應用程式,它有一個定義的結束日期(“dt1”)并根據今天的日期計算剩余的天數。我讓它對開始日期(“dt2”)進行硬編碼,但是當我想添加一個按鈕來獲取今天的日期以覆寫預設的開始日期(“dt2”)時,它只是不承認它 - 相反它堅持我之前設定的 dt2 日期。
如何修改我的代碼,以便通過按下按鈕覆寫 dt2 并將 dt2 中的值替換為今天的日期?
任何幫助深表感謝!
import 'package:flutter/material.dart';
void main() {
runApp(MaterialApp(home: Home()));
}
class Home extends StatefulWidget {
@override
State<Home> createState() => _HomeState();
}
class _HomeState extends State<Home> {
@override
Widget build(BuildContext context) {
DateTime dt1 = DateTime.parse("2022-06-01");
DateTime dt2 = DateTime.parse("2022-01-01");
Duration diff = dt1.difference(dt2);
return Scaffold(
appBar: AppBar(
title: const Text("Time left at work"),
centerTitle: true,
backgroundColor: const Color.fromARGB(255, 131, 48, 75),
),
body: Container(
alignment: Alignment.center,
color: Colors.black,
padding: const EdgeInsets.all(20),
child: Column(children: [
TextButton(
onPressed: () {
DateTime dt2 = DateTime.now();
Duration diff = dt1.difference(dt2);
print(dt2);
},
child: const Text(
"Refresh current date",
style: TextStyle(
color: Colors.deepOrange,
fontWeight: FontWeight.bold,
fontSize: 10.0,
),
),
),
Text(
"Days left: " diff.inDays.toString(),
style: const TextStyle(
color: Colors.white,
fontWeight: FontWeight.bold,
fontSize: 40.0,
),
),
]),
));
}
}
uj5u.com熱心網友回復:
當你想改變一個 var 的值時,你必須使用“setState()”。
因為,您想在“運行”模式下更改值。(idk怎么說)因為這個原因你需要使用它。
setState(() {
var_you_want_change = new_value_of_the_var;
});
在“OnPressed”中試試這個!
onPressed: () {
DateTime dt2 = DateTime.now();
Duration diff = dt1.difference(dt2);
print(dt2);
setState(() {
diff = dt1.difference(dt2);
//try ToString if this doesn't work
});
},
uj5u.com熱心網友回復:
這是當前修改后的代碼:
import 'package:flutter/material.dart';
void main() {
runApp(const MaterialApp(home: Home()));
}
class Home extends StatefulWidget {
const Home({Key? key}) : super(key: key);
@override
State<Home> createState() => _HomeState();
}
class _HomeState extends State<Home> {
DateTime dt1 = DateTime.parse("2022-06-01");
DateTime dt2 = DateTime.parse("2022-01-01");
Duration get diff => dt1.difference(dt2);
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text("Work Terminator"),
centerTitle: true,
backgroundColor: Colors.grey[850],
),
body: Container(
alignment: Alignment.center,
color: Colors.black,
padding: const EdgeInsets.all(20),
child: Column(children: [
TextButton(
onPressed: () {
print(dt2);
dt2 = DateTime.now();
},
child: const Text(
"Refresh current date",
style: TextStyle(
color: Colors.deepOrange,
fontWeight: FontWeight.bold,
fontSize: 10.0,
),
),
),
Text(
"Days left: " diff.inDays.toString(),
style: const TextStyle(
color: Colors.white,
fontWeight: FontWeight.bold,
fontSize: 40.0,
),
),
]),
));
}
}
uj5u.com熱心網友回復:
build從您的和onPressed函式中洗掉此代碼
DateTime dt1 = DateTime.parse("2022-06-01");
DateTime dt2 = DateTime.parse("2022-01-01");
Duration diff = dt1.difference(dt2);
宣告dt1和dt2作為你的_HomeState 領域
class _HomeState extends State<Home> {
DateTime dt1 = DateTime.parse("2022-06-01");
DateTime dt2 = DateTime.parse("2022-01-01");
diff在你的名字中宣告 getter_HomeState
class _HomeState extends State<Home> {
DateTime dt1 = DateTime.parse("2022-06-01");
DateTime dt2 = DateTime.parse("2022-01-01");
Duration get diff => dt1.difference(dt2);
最后在onPressed(重要setState的是為了更新 UI 進行包裝):
onPressed: () {
setState((){
dt2 = DateTime.now()
});
},
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/473842.html
