我正在開發一個具有完整按鈕的專案:
Expanded(child: ElevatedButton(
onPressed: () {
completeTrip(
list[index]['id']);
},
child: Text("Complete"),
style: ElevatedButton
.styleFrom(
primary: Colors.green,),
),
我的資料庫中有一個日期和時間:
{
'from_date':'16-01-2022'
'time' :'1:15 PM'
}
我想要的是僅在通過給定時才顯示該按鈕,在此之前不得顯示該按鈕?
有什么辦法嗎?提前感謝<3。
uj5u.com熱心網友回復:
您可以使用 Stream.periodic
DateTime current = DateTime.now();
Stream timer = Stream.periodic( Duration(seconds: 1), (i){
current = current.add(Duration(seconds: 1));
return current;
});
timer.listen((data){
//if it reached the given time do something on your button
});
并在結束通話時 timer.cancel;
uj5u.com熱心網友回復:
無法確定您是否需要幫助決議日期和時間或使用某種計時器來顯示按鈕。所以我修改了 @Bunny1376 的答案以添加一些東西:使用布林值檢查是否顯示按鈕:
bool showBtn = false;
在您的 initState 或其他地方,將您作為 json 收到的日期和時間決議為:
Map<String,String> _dateTimeJson = {
'from_date':'16-01-2022',
'time': '1:15 PM'
};
String _dateTimeString = _dateTimeJson['from_date'] ' ' _dateTimeJson['time'];
DateFormat _format = DateFormat('dd-mm-yyyy HH:mm a');
DateTime _dateTime = _format.parse(_dateTimeString);
在這里,我們在 'time' 欄位中附加了 'from_date' 以形成一個單獨的 dateTime 字串,稍后將其決議為 DateTime。我為此使用了 intl 包。更多詳情:https ://pub.dev/packages/intl
現在,添加一個每秒執行一次的計時器,以檢查當前日期時間是否大于您的 dateTime 為:
DateTime current = DateTime.now();
Stream timer = Stream.periodic( Duration(seconds: 1), (i){
current = current.add(Duration(seconds: 1));
return current;
});
timer.listen((data){
if(current.isAfter(_dateTime)){
// show button
WidgetsBinding.instance.addPostFrameCallback((timeStamp) {
setState(() {
showBtn = true;
});
});
}
});
按鈕的邏輯是:
if(showBtn)...[
Expanded(child: ElevatedButton(
onPressed: () {
completeTrip(
list[index]['id']);
},
child: Text("Complete"),
style: ElevatedButton
.styleFrom(
primary: Colors.green,),
),
]
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/412708.html
標籤:
上一篇:水平串列視圖的一部分不在基線上
