每周递增和递减计数器的点击按钮。如何实现这一点在Flutter。
class DateCounter extends StatefulWidget {
const DateCounter({Key? key}) : super(key: key);
@override
State<DateCounter> createState() => _DateCounterState();
}
class _DateCounterState extends State<DateCounter> {
final _inputStartFormat = DateFormat('dd-MM-yyyy');
var weekFirstDay;
var weekLastDay;
late DateTime startDateTime;
late DateTime endDateTime;
@override
void initState() {
super.initState();
startDateTime = DateTime(DateTime.now().year, DateTime.now().month, DateTime.now().day);
weekFirstDay = _inputStartFormat.format(startDateTime);
debugPrint("start new $startDateTime");
endDateTime = endDateWeekly(startDateTime);
debugPrint("start end $endDateTime");
weekLastDay = _inputStartFormat.format(endDateTime);
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
children: [
InkWell(
onTap: (){
weeklySubtractFunc();
}, child: Container(
width: 30,
height: 30,
color: Colors.grey,
child: const Center(child: Text("-")))),
Text("$weekFirstDay To $weekLastDay"),
InkWell(
onTap: (){
weeklyAddFunc();
},
child: Container(
width: 30,
height: 30,
color: Colors.grey,
child: const Center(child: Text("+"))))
],
),
),
);
}
DateTime endDateWeekly(DateTime startDate) {
return DateTime(startDate.year, startDate.month, startDate.day)
.add(const Duration(days: 7 - 1));
}
DateTime addWeekly(DateTime date, int days, bool isForward) {
return
DateTime(date.year, date.month, isForward ? date.day + 7 : date.day - 7);
}
void weeklyAddFunc() {
startDateTime = addWeekly(startDateTime, 7, true);
weekFirstDay = _inputStartFormat.format(startDateTime);
endDateTime = endDateWeekly(startDateTime);
weekLastDay = _inputStartFormat.format(endDateTime);
debugPrint("add Func $startDateTime");
debugPrint("add Func 2 $endDateTime");
setState(() {});
}
void weeklySubtractFunc() {
startDateTime = addWeekly(startDateTime, -7, false);
weekFirstDay = _inputStartFormat.format(startDateTime);
endDateTime = endDateWeekly(startDateTime);
weekLastDay = _inputStartFormat.format(endDateTime);
debugPrint("sub Func $startDateTime");
debugPrint("sub Func 2 $endDateTime");
setState(() {});
}
}
最初,需要将当前周的开始和结束日期显示为19-02-2023至25-02-2023递减按钮,需要将上一周显示为12-02-2023至18-02-2023递增按钮,需要将下一周显示为26-02-2023至04-03-2023。
2条答案
按热度按时间lskq00tm1#
uubf1zoe2#
也许有更好的方法用日期函数来做到这一点,但这是我想出的。
添加一个函数,通过回溯到正确的工作日来确定一周的开始(您希望它从星期日开始,即工作日= 7):
然后,只需添加6天以获得本周末,或添加7天以获得下周/上周:
因此,首先获取当前周的开始时间和同一周的结束时间:
然后在onTap事件中使用上述函数设置新状态: