从当前月份生成 1 年以上的列表月份

Generate list month 1 year above from current month

目前我想创建函数来生成 1 年以上的列表(例如当前月份是 2021 年 8 月,我想创建 2021 年 7 月 - 2020 年 8 月的列表)任何推荐 class 或内置在飞镖/扑动中发挥作用?

这是当前代码

void getListOfMonthAYear() {
  List<String> months = [];
  Map<int, String> listOfMonth = {
    1: 'January',
    2: 'February',
    3: 'March',
    4: 'April',
    5: 'May',
    6: 'June',
    7: 'July',
    8: 'August',
    9: 'September',
    10: 'October',
    11: 'November',
    12: 'December'
  };
  DateTime currentDate = DateTime.now();
  int listMonthFor1Year = DateTime.monthsPerYear;
  int currentMonth = DateTime.now().month;
  for (int i = 0; i < listMonthFor1Year; i++) {
    print(listOfMonth[currentMonth - i]);
  }
}

1 月之后,列表变为空(是的,因为找不到低于 1 的月份)。

是这样的吗?

void main() {
  getMonthAYearFromCurrent().forEach(print);
  // August 2021
  // July 2021
  // June 2021
  // May 2021
  // April 2021
  // March 2021
  // February 2021
  // January 2021
  // December 2020
  // November 2020
  // October 2020
  // September 2020
}

List<String> getMonthAYearFromCurrent({int length = 12}) {
  const listOfMonth = [
    'January',
    'February',
    'March',
    'April',
    'May',
    'June',
    'July',
    'August',
    'September',
    'October',
    'November',
    'December',
  ];

  final currentDate = DateTime.now();
  final months = <String>[];

  for (var i = 0; i < length; i++) {
    final yearInt = currentDate.year - (0 - (currentDate.month - i) + 12) ~/ 12;
    final monthInt = (currentDate.month - i - 1) % 12;
    months.add('${listOfMonth[monthInt]} $yearInt');
  }

  return months;
}