【问题标题】:How to increase and decrease a date in weekly format in flutter?如何在颤动中增加和减少每周格式的日期?
【发布时间】:2023-02-21 22:27:19
【问题描述】:

点击按钮每周递增和递减计数器。如何在颤动中实现这一点。

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。

【问题讨论】:

    标签: android flutter dart mobile


    【解决方案1】:
    
    DateTime getNewDateTime(DateTime date, int days, bool isForward) {
      return isForward
          ? date.add(Duration(days: days))
          : date.subtract(Duration(days: days));
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-09-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-07-06
      • 1970-01-01
      相关资源
      最近更新 更多