getAllPeriodsDetails method
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;
}