下面是我尝试过的每月模式的例子。日期需要在点击按钮时获得增量。增量和减量按钮添加和减去日期。
如何增加周线格式?
import 'package:flutter/material.dart';
import 'package:flutter_base/src/common_widget/custom_app_bar.dart';
import 'package:flutter_base/utils/app_colors.dart';
import 'package:flutter_base/utils/decorations.dart';
class DateCounter extends StatefulWidget {
const DateCounter({Key? key}) : super(key: key);
@override
State<DateCounter> createState() => _DateCounterState();
}
class _DateCounterState extends State<DateCounter> {
var _selectedMonthlyStartDate = DateTime.now();
final _inputStartFormat = DateFormat('dd-MM-yyyy');
var month;
var monthEnd;
late DateTime startDateTime;
late DateTime endDateTime;
@override
void initState() {
// TODO: implement initState
super.initState();
startDateTime = DateTime(DateTime.now().year, DateTime.now().month, 1);
month = _inputStartFormat.format(startDateTime);
endDateTime = DateTime(DateTime.now().year, DateTime.now().month + 1, 0);
monthEnd = _inputStartFormat.format(endDateTime);
}
//output : 19-02-23 to 25-02-23 how to increase this weekly format
DateTime findFirstDateOfTheWeek(DateTime dateTime) {
return dateTime.subtract(Duration(days: dateTime.weekday));
}
DateTime findLastDateOfTheWeek(DateTime dateTime) {
return dateTime.add(Duration(days: DateTime.daysPerWeek - dateTime.weekday - 1));
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: CustomAppBar(
context,
isTrailingButtonLastVisible: false,
isBackButtonVisible: true,
titleVisible: true,
titleColor: AppColors.colorBlack,
fontWeight: FontWeight.bold,
fontSize: 16,
isTrailingButtonVisible: true,
),
body: Center(
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
children: [
InkWell(
onTap: (){
monthSubtractFunc();
}, child: Container(
width: 30,
height: 30,
color: Colors.grey,
child: const Center(child: Text("-")))),
Text("$month To $monthEnd"),
InkWell(
onTap: (){
monthAddFunc();
},
child: Container(
width: 30,
height: 30,
color: Colors.grey,
child: Center(child: Text("+"))))
],
),
),
);
}
void monthAddFunc(){
_selectedMonthlyStartDate = DateTime(_selectedMonthlyStartDate.year,
_selectedMonthlyStartDate.month + 1, 1);
month = _inputStartFormat.format(_selectedMonthlyStartDate);
_selectedMonthlyStartDate = DateTime(_selectedMonthlyStartDate.year,
_selectedMonthlyStartDate.month + 1, 0);
monthEnd = _inputStartFormat.format(_selectedMonthlyStartDate);
setState(() {});
}
void monthSubtractFunc(){
_selectedMonthlyStartDate = DateTime(_selectedMonthlyStartDate.year,
_selectedMonthlyStartDate.month - 1, 1);
month = _inputStartFormat.format(_selectedMonthlyStartDate);
_selectedMonthlyStartDate = DateTime(_selectedMonthlyStartDate.year,
_selectedMonthlyStartDate.month + 1, 0);
monthEnd = _inputStartFormat.format(_selectedMonthlyStartDate);
setState(() {});
}
}
我的输出需要类似于“2023年1月1日”至“2023年3月31日”=〉正向点击=〉“2023年4月1日”至“2023年6月30日”负向按钮减少3个月。
如果有人知道解决办法,请帮助...谢谢。
2条答案
按热度按时间fumotvh31#
添加两个函数:
然后在您的init中调用它们:
在增加/减少功能中:
然后使用您想要的任何格式来显示日期。
endDate
函数基于输入日期创建一个新日期,添加三个月并将其设置为该月的第一天,然后删除一天以获得正确的该月的最后一天。cwtwac6a2#
我猜你错过了什么,在
DateTime
类中有一个构建,它可以让你做以下事情:你也可以这样做
但是如果你增加超过12个月的时间,这种方法会产生问题。所以对于这种情况,你需要做一些检查和额外的工作。