adguard-home-manager/lib/screens/clients/client/blocking_schedule.dart

143 lines
4.9 KiB
Dart
Raw Normal View History

2024-01-25 22:34:30 +01:00
import 'package:flutter/material.dart';
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
import 'package:adguard_home_manager/screens/clients/client/blocking_schedule_modal.dart';
import 'package:adguard_home_manager/widgets/custom_list_tile.dart';
import 'package:adguard_home_manager/widgets/section_label.dart';
import 'package:adguard_home_manager/models/clients.dart';
class BlockingSchedule extends StatelessWidget {
final BlockedServicesSchedule blockedServicesSchedule;
final void Function(BlockedServicesSchedule) setBlockedServicesSchedule;
const BlockingSchedule({
super.key,
required this.blockedServicesSchedule,
required this.setBlockedServicesSchedule,
});
@override
Widget build(BuildContext context) {
void openAddScheduleModal() {
showDialog(
context: context,
builder: (context) => BlockingScheduleModal(
onConfirm: (v) => {},
),
);
}
String formatTime(int time) {
final formatted = Duration(milliseconds: time);
final hours = formatted.inHours;
final minutes = formatted.inMinutes - hours*60;
return "${hours.toString().padLeft(2 , '0')}:${minutes.toString().padLeft(2, '0')}";
}
return Column(
children: [
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
SectionLabel(label: AppLocalizations.of(context)!.pauseServiceBlocking),
Padding(
padding: const EdgeInsets.only(right: 12),
child: IconButton(
onPressed: openAddScheduleModal,
icon: const Icon(Icons.add)
),
)
],
),
const SizedBox(height: 2),
if (blockedServicesSchedule.mon != null) _ScheduleTile(
weekday: AppLocalizations.of(context)!.monday,
schedule: "${formatTime(blockedServicesSchedule.mon!.start!)} - ${formatTime(blockedServicesSchedule.mon!.end!)}",
onEdit: () => {},
onDelete: () => {}
),
if (blockedServicesSchedule.tue != null) _ScheduleTile(
weekday: AppLocalizations.of(context)!.tuesday,
schedule: "${formatTime(blockedServicesSchedule.tue!.start!)} - ${formatTime(blockedServicesSchedule.tue!.end!)}",
onEdit: () => {},
onDelete: () => {}
),
if (blockedServicesSchedule.wed != null) _ScheduleTile(
weekday: AppLocalizations.of(context)!.wednesday,
schedule: "${formatTime(blockedServicesSchedule.wed!.start!)} - ${formatTime(blockedServicesSchedule.wed!.end!)}",
onEdit: () => {},
onDelete: () => {}
),
if (blockedServicesSchedule.thu != null) _ScheduleTile(
weekday: AppLocalizations.of(context)!.thursday,
schedule: "${formatTime(blockedServicesSchedule.thu!.start!)} - ${formatTime(blockedServicesSchedule.thu!.end!)}",
onEdit: () => {},
onDelete: () => {}
),
if (blockedServicesSchedule.fri != null) _ScheduleTile(
weekday: AppLocalizations.of(context)!.friday,
schedule: "${formatTime(blockedServicesSchedule.fri!.start!)} - ${formatTime(blockedServicesSchedule.fri!.end!)}",
onEdit: () => {},
onDelete: () => {}
),
if (blockedServicesSchedule.sat != null) _ScheduleTile(
weekday: AppLocalizations.of(context)!.saturday,
schedule: "${formatTime(blockedServicesSchedule.sat!.start!)} - ${formatTime(blockedServicesSchedule.sat!.end!)}",
onEdit: () => {},
onDelete: () => {}
),
if (blockedServicesSchedule.sun != null) _ScheduleTile(
weekday: AppLocalizations.of(context)!.sunday,
schedule: "${formatTime(blockedServicesSchedule.sun!.start!)} - ${formatTime(blockedServicesSchedule.sun!.end!)}",
onEdit: () => {},
onDelete: () => {}
),
],
);
}
}
class _ScheduleTile extends StatelessWidget {
final String weekday;
final String schedule;
final void Function() onEdit;
final void Function() onDelete;
const _ScheduleTile({
required this.weekday,
required this.schedule,
required this.onEdit,
required this.onDelete,
});
@override
Widget build(BuildContext context) {
return CustomListTile(
title: weekday,
subtitle: schedule,
trailing: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
IconButton(
onPressed: onEdit,
icon: const Icon(Icons.edit_rounded),
tooltip: AppLocalizations.of(context)!.edit,
),
const SizedBox(width: 4),
IconButton(
onPressed: onDelete,
icon: const Icon(Icons.delete_rounded),
tooltip: AppLocalizations.of(context)!.delete,
),
],
),
padding: const EdgeInsets.only(
left: 16,
top: 6,
right: 12,
bottom: 6
)
);
}
}