This commit is contained in:
2024-12-16 02:35:30 +03:00
parent 3800860d02
commit de1d6c85e5
12 changed files with 351 additions and 39 deletions

View File

@@ -1,6 +1,7 @@
import 'dart:core';
import 'dart:convert';
import 'dart:developer';
import 'package:flutter/material.dart';
import 'package:intl/intl.dart' show DateFormat;
import 'package:flutter/services.dart';
@@ -85,7 +86,31 @@ class ScheduleService {
if(scheduleKey == null) return null;
return await getScheduleByKey(scheduleKey);
List<Map<String, dynamic>>? schedule = await getScheduleByKey(scheduleKey);
if(schedule == null) return null;
int durationOffset = 0;
for (var i = 0; i < schedule.length; i++) {
final scheduleItem = schedule[i];
final int duration = (scheduleItem['duration'] as int);
final DateTime start = datetimeStartWithOffset.copyWith().add(Duration(minutes: durationOffset));
DateTime end = datetimeStartWithOffset.copyWith().add(Duration(minutes: durationOffset + duration));
durationOffset += duration;
bool showEndDate = false;
if(i == (schedule.length -1)) {
final scheduleNextDay = await getScheduleByDate(datetime.copyWith().add(const Duration(days: 1)));
final firstScheduleElement = scheduleNextDay?[0];
if(firstScheduleElement != null && (firstScheduleElement['direction'] as String) == (scheduleItem['direction'] as String)) {
end = end.add(Duration(minutes: firstScheduleElement['duration'] as int));
showEndDate = true;
}
}
schedule[i]['start'] = start;
schedule[i]['end'] = end;
}
return schedule;
}
Future<Map<String, dynamic>?> getCurrentStatus() async {
@@ -101,32 +126,50 @@ class ScheduleService {
}
int durationOffset = 0;
for (final Map<String, dynamic> scheduleItem in schedule) {
for (var i = 0; i < schedule.length; i++) {
final scheduleItem = schedule[i];
final int duration = (scheduleItem['duration'] as int);
final DateTime start = datetimeStartWithOffset.copyWith().add(Duration(minutes: durationOffset));
final DateTime end = datetimeStartWithOffset.copyWith().add(Duration(minutes: durationOffset + duration));
DateTime end = datetimeStartWithOffset.copyWith().add(Duration(minutes: durationOffset + duration));
durationOffset += duration;
bool showEndDate = false;
if(i == (schedule.length -1)) {
final scheduleNextDay = await getScheduleByDate(now.copyWith().add(const Duration(days: 1)));
final firstScheduleElement = scheduleNextDay?[0];
if(firstScheduleElement != null && (firstScheduleElement['direction'] as String) == (scheduleItem['direction'] as String)) {
end = end.add(Duration(minutes: firstScheduleElement['duration'] as int));
showEndDate = true;
}
}
if(now.isAfter(start) && now.isBefore(end)) {
return <String, dynamic>{
"direction": scheduleItem['direction'] as String,
"start": start,
"end": end
"end": end,
"need_show_end_date": showEndDate,
};
}
}
return null;
}
static String formatDirection(String direction) {
switch(direction) {
case 'in_city': return 'В город';
case 'out_city': return 'Из города';
default: return 'Переключение';
}
}
// final datetimeStartWithOffset = now.copyWith(hour: 0, minute: 0, second: 0, microsecond: 0, millisecond: 0)
// .add(dayOffset);
//
// final DateTime usedScheduleDatetime = now.isAfter(datetimeStartWithOffset)
// ? now
// : now.copyWith().subtract(const Duration(days: 1));
static IconData getIconByDirection(String? direction) {
switch(direction) {
case 'in_city': return Icons.input_outlined;
case 'out_city': return Icons.output_outlined;
default: return Icons.change_circle_outlined;
}
}
}