getAllPeriodsDetails method

Future<List<PeriodsDateRange>> getAllPeriodsDetails()

get all period details like period start date, period end date, period duration and all period dates. Default is object of PeriodsDateRange

Implementation

Future<List<PeriodsDateRange>> getAllPeriodsDetails() async {
  List<PeriodsDateRange> listPeriodsDateRange = [];
  final dbHelper = MenstrualCycleDbHelper.instance;
  List<DateTime> periodDateRange = [];
  List<String> lastPeriodRange = await dbHelper.getPastPeriodDates();
  if (lastPeriodRange.isNotEmpty) {
    for (int i = 0; i < lastPeriodRange.length; i++) {
      periodDateRange.add(DateTime.parse(lastPeriodRange[i]));
    }
    periodDateRange.sort((a, b) => a.compareTo(b));
    int indexId = 1;
    int periodDuration = 0;
    List<String>? periodDates = [];

    PeriodsDateRange periodsDateRange = PeriodsDateRange(allPeriodDates: []);
    if (periodDateRange.length > 1) {
      for (int i = 0; i < periodDateRange.length; i++) {
        periodDuration = periodDuration + 1;
        if (i == 0) {
          periodsDateRange.id = indexId;
          periodsDateRange.periodStartDate =
              CalenderDateUtils.dateDayFormat(periodDateRange[i]);
          periodsDateRange.cycleStartDate =
              CalenderDateUtils.dateDayFormat(periodDateRange[i]);
          periodDates!
              .add(CalenderDateUtils.dateDayFormat(periodDateRange[i]));
        } else {
          DateTime previousDate = periodDateRange[i - 1];
          DateTime currentDate = periodDateRange[i];
          int inDays = currentDate.difference(previousDate).inDays - 1;

          if (inDays > 1) {
            periodDates = [];
            periodDuration = 1;
            periodsDateRange.cycleLength = currentDate
                .difference(DateTime.parse(periodsDateRange.cycleStartDate!))
                .inDays;
            periodsDateRange.cycleEndDate = CalenderDateUtils.dateDayFormat(
                currentDate.add(const Duration(days: -1)));
            listPeriodsDateRange.add(periodsDateRange);

            indexId = indexId + 1;
            periodsDateRange = PeriodsDateRange(allPeriodDates: []);
            periodsDateRange.id = indexId;
            periodsDateRange.periodStartDate =
                CalenderDateUtils.dateDayFormat(currentDate);
            periodsDateRange.cycleStartDate =
                CalenderDateUtils.dateDayFormat(currentDate);
            periodsDateRange.cycleLength = inDays;
            periodDates
                .add(CalenderDateUtils.dateDayFormat(periodDateRange[i]));
          } else {
            periodDates!
                .add(CalenderDateUtils.dateDayFormat(periodDateRange[i]));
            periodsDateRange.periodEndDate =
                CalenderDateUtils.dateDayFormat(currentDate);
            periodsDateRange.periodDuration = periodDuration;
            periodsDateRange.allPeriodDates = periodDates;
          }
        }
      }
      periodsDateRange.cycleLength = DateTime.now()
          .difference(DateTime.parse(periodsDateRange.cycleStartDate!))
          .inDays;
      listPeriodsDateRange.add(periodsDateRange);
    } else {
      periodsDateRange.id = indexId;
      periodsDateRange.periodStartDate =
          CalenderDateUtils.dateDayFormat(periodDateRange[0]);
      periodsDateRange.cycleStartDate =
          CalenderDateUtils.dateDayFormat(periodDateRange[0]);
      periodsDateRange.cycleEndDate =
          CalenderDateUtils.dateDayFormat(periodDateRange[0]);
      periodsDateRange.periodEndDate =
          CalenderDateUtils.dateDayFormat(periodDateRange[0]);
      periodsDateRange.periodDuration = periodDuration;
      periodsDateRange.cycleLength = 1;
      periodsDateRange.allPeriodDates!
          .add(CalenderDateUtils.dateDayFormat(periodDateRange[0]));
      listPeriodsDateRange.add(periodsDateRange);
    }
  }
  listPeriodsDateRange = listPeriodsDateRange.reversed.toList();
  return listPeriodsDateRange;
}