Skip to content

Commit 99d5302

Browse files
committed
Add button to add alarm through calendar item dialog
1 parent 3b2acfc commit 99d5302

File tree

3 files changed

+62
-22
lines changed

3 files changed

+62
-22
lines changed

app/lib/cubits/settings.dart

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -241,9 +241,9 @@ class SettingsCubit extends Cubit<FlowSettings>
241241
return _runSave(newState.saveAlarms);
242242
}
243243

244-
Future<void> removeAlarm(Alarm alarm) {
244+
Future<void> removeAlarm(int index) {
245245
final newState =
246-
state.copyWith(alarms: state.alarms.where((e) => e != alarm).toList());
246+
state.copyWith(alarms: List<Alarm>.from(state.alarms)..removeAt(index));
247247
emit(newState);
248248
return _runSave(newState.saveAlarms);
249249
}

app/lib/pages/alarm/page.dart

Lines changed: 38 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,6 @@ class _AlarmPageState extends State<AlarmPage> {
2626
return GridView.extent(
2727
maxCrossAxisExtent: 300,
2828
childAspectRatio: 1.25,
29-
mainAxisSpacing: 20,
30-
crossAxisSpacing: 20,
3129
children: state.alarms
3230
.mapIndexed((i, e) => Card(
3331
clipBehavior: Clip.antiAlias,
@@ -45,21 +43,36 @@ class _AlarmPageState extends State<AlarmPage> {
4543
}
4644
},
4745
child: Padding(
48-
padding: const EdgeInsets.symmetric(vertical: 4),
46+
padding: const EdgeInsets.only(top: 2, bottom: 8),
4947
child: Column(
5048
mainAxisAlignment: MainAxisAlignment.spaceBetween,
5149
children: [
52-
SwitchListTile(
53-
value: e.isActive,
54-
onChanged: (_) {
55-
final settingsCubit =
56-
context.read<SettingsCubit>();
57-
settingsCubit.changeAlarm(
58-
i, e.copyWith(isActive: !e.isActive));
59-
},
60-
title: Text(
61-
AppLocalizations.of(context).enabled,
62-
),
50+
Row(
51+
children: [
52+
Expanded(
53+
child: SwitchListTile(
54+
value: e.isActive,
55+
onChanged: (_) {
56+
final settingsCubit =
57+
context.read<SettingsCubit>();
58+
settingsCubit.changeAlarm(
59+
i, e.copyWith(isActive: !e.isActive));
60+
},
61+
title: Text(
62+
AppLocalizations.of(context).enabled,
63+
),
64+
),
65+
),
66+
IconButton(
67+
icon: const PhosphorIcon(
68+
PhosphorIconsLight.trash),
69+
onPressed: () {
70+
final settingsCubit =
71+
context.read<SettingsCubit>();
72+
settingsCubit.removeAlarm(i);
73+
},
74+
),
75+
],
6376
),
6477
Column(
6578
mainAxisSize: MainAxisSize.min,
@@ -148,9 +161,18 @@ class AlarmDialog extends StatelessWidget {
148161
const SizedBox(height: 20),
149162
TextFormField(
150163
decoration: InputDecoration(
151-
labelText: AppLocalizations.of(context).name,
152-
),
164+
labelText: AppLocalizations.of(context).name, filled: true),
165+
initialValue: alarm.title,
166+
onChanged: (value) => alarm = alarm.copyWith(title: value),
167+
),
168+
const SizedBox(height: 8),
169+
TextFormField(
170+
decoration: InputDecoration(
171+
labelText: AppLocalizations.of(context).description,
172+
border: const OutlineInputBorder()),
153173
initialValue: alarm.title,
174+
minLines: 3,
175+
maxLines: 5,
154176
onChanged: (value) => alarm = alarm.copyWith(title: value),
155177
),
156178
],

app/lib/pages/calendar/item.dart

Lines changed: 22 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
import 'package:flow/cubits/flow.dart';
2+
import 'package:flow/cubits/settings.dart';
23
import 'package:flow/helpers/event.dart';
4+
import 'package:flow/pages/alarm/page.dart';
35
import 'package:flow/pages/groups/view.dart';
46
import 'package:flow/pages/resources/view.dart';
57
import 'package:flow/pages/users/view.dart';
@@ -120,11 +122,27 @@ class _CalendarItemDialogState extends State<CalendarItemDialog> {
120122
}
121123
},
122124
),
125+
IconButton(
126+
icon: const PhosphorIcon(PhosphorIconsLight.alarm),
127+
onPressed: () async {
128+
final alarm = Alarm(
129+
date: (_item.start ?? DateTime.now()),
130+
description: _item.description,
131+
title: _item.name,
132+
isActive: _item.start != null,
133+
);
134+
final settingsCubit = context.read<SettingsCubit>();
135+
final result = await showDialog<Alarm>(
136+
context: context,
137+
builder: (context) => AlarmDialog(initialValue: alarm),
138+
);
139+
if (result == null) return;
140+
settingsCubit.addAlarm(result);
141+
},
142+
),
123143
MenuAnchor(
124-
builder: (context, controller, child) => IconButton(
125-
icon: const PhosphorIcon(PhosphorIconsLight.dotsThreeVertical),
126-
onPressed: () =>
127-
controller.isOpen ? controller.close() : controller.open(),
144+
builder: defaultMenuButton(
145+
icon: const PhosphorIcon(PhosphorIconsLight.arrowsCounterClockwise),
128146
),
129147
menuChildren: [
130148
Padding(

0 commit comments

Comments
 (0)