Skip to content

Commit eb10fd9

Browse files
committed
feat: Tampilkan dialog peringatan jika si user logout dalam kondisi timer-nya sedang jalan
Cegah si user agar tidak bisa logout jika kondisi timer-nya sedang jalan.
1 parent 89e1078 commit eb10fd9

File tree

2 files changed

+36
-16
lines changed

2 files changed

+36
-16
lines changed

lib/feature/presentation/page/home/home_page.dart

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ import 'package:tray_manager/tray_manager.dart';
4545
import 'package:window_manager/window_manager.dart';
4646

4747
var countTimeReminderTrackInSeconds = 0;
48+
var isGlobalTimerStart = false;
4849

4950
class HomePage extends StatefulWidget {
5051
static const routePath = '/home';
@@ -83,7 +84,6 @@ class _HomePageState extends State<HomePage> with TrayListener, WindowListener {
8384
var isWindowVisible = true;
8485
var userId = '';
8586
var email = '';
86-
var isTimerStart = false;
8787
var isTimerStartTemp = false;
8888
TrackUserLiteResponse? trackUserLite;
8989
ItemProjectResponse? selectedProject;
@@ -147,7 +147,7 @@ class _HomePageState extends State<HomePage> with TrayListener, WindowListener {
147147
now.day,
148148
);
149149
timerDate = Timer.periodic(const Duration(seconds: 1), (_) {
150-
if (!isTimerStart) {
150+
if (!isGlobalTimerStart) {
151151
// reminder track
152152
var isShowReminderTrack = false;
153153
final now = DateTime.now();
@@ -533,7 +533,7 @@ class _HomePageState extends State<HomePage> with TrayListener, WindowListener {
533533
final firstTask = filteredTask.first;
534534
startTime = DateTime.now();
535535
selectedTask = firstTask;
536-
isTimerStart = true;
536+
isGlobalTimerStart = true;
537537
setTrayContextMenu();
538538
valueNotifierTaskTracked.value = firstTask.trackedInSeconds;
539539
resetCountTimer();
@@ -666,7 +666,7 @@ class _HomePageState extends State<HomePage> with TrayListener, WindowListener {
666666
}
667667
startTime = DateTime.now();
668668
selectedTask = itemTask;
669-
isTimerStart = true;
669+
isGlobalTimerStart = true;
670670
setTrayContextMenu();
671671
valueNotifierTaskTracked.value = itemTask.trackedInSeconds;
672672
resetCountTimer();
@@ -733,7 +733,7 @@ class _HomePageState extends State<HomePage> with TrayListener, WindowListener {
733733
}
734734

735735
void stopTimerFromButton(TrackTask itemTask) {
736-
isTimerStart = false;
736+
isGlobalTimerStart = false;
737737
setTrayContextMenu();
738738
itemTask.trackedInSeconds = valueNotifierTaskTracked.value;
739739
stopTimer();
@@ -747,7 +747,7 @@ class _HomePageState extends State<HomePage> with TrayListener, WindowListener {
747747
borderRadius: BorderRadius.circular(8),
748748
child: InkWell(
749749
borderRadius: BorderRadius.circular(8),
750-
onTap: isTimerStart || isTimerStartTemp
750+
onTap: isGlobalTimerStart || isTimerStartTemp
751751
? null
752752
: () async {
753753
final selectedProjectTemp = await showModalBottomSheet(
@@ -806,7 +806,7 @@ class _HomePageState extends State<HomePage> with TrayListener, WindowListener {
806806
height: 8,
807807
decoration: BoxDecoration(
808808
shape: BoxShape.circle,
809-
color: isTimerStart || isTimerStartTemp ? Colors.green : Colors.grey,
809+
color: isGlobalTimerStart || isTimerStartTemp ? Colors.green : Colors.grey,
810810
),
811811
),
812812
const SizedBox(width: 4),
@@ -822,7 +822,7 @@ class _HomePageState extends State<HomePage> with TrayListener, WindowListener {
822822
),
823823
),
824824
const SizedBox(width: 16),
825-
isTimerStart || isTimerStartTemp
825+
isGlobalTimerStart || isTimerStartTemp
826826
? Container()
827827
: const Icon(
828828
Icons.keyboard_arrow_down,
@@ -995,7 +995,7 @@ class _HomePageState extends State<HomePage> with TrayListener, WindowListener {
995995
void setTrayContextMenu() {
996996
final items = <MenuItem>[];
997997
if (listTrackTask.isNotEmpty) {
998-
if (!isTimerStart) {
998+
if (!isGlobalTimerStart) {
999999
items.add(
10001000
MenuItem(
10011001
key: keyTrayStartWorking,
@@ -1096,7 +1096,7 @@ class _HomePageState extends State<HomePage> with TrayListener, WindowListener {
10961096
final task = listTrackTask.first;
10971097
startTime = DateTime.now();
10981098
selectedTask = task;
1099-
isTimerStart = true;
1099+
isGlobalTimerStart = true;
11001100
setTrayContextMenu();
11011101
valueNotifierTaskTracked.value = task.trackedInSeconds;
11021102
resetCountTimer();
@@ -1107,7 +1107,7 @@ class _HomePageState extends State<HomePage> with TrayListener, WindowListener {
11071107
final task = filteredTask.first;
11081108
startTime = DateTime.now();
11091109
selectedTask = task;
1110-
isTimerStart = true;
1110+
isGlobalTimerStart = true;
11111111
setTrayContextMenu();
11121112
valueNotifierTaskTracked.value = task.trackedInSeconds;
11131113
resetCountTimer();
@@ -1117,7 +1117,7 @@ class _HomePageState extends State<HomePage> with TrayListener, WindowListener {
11171117
}
11181118

11191119
void stopTimerFromSystemTray() {
1120-
isTimerStart = false;
1120+
isGlobalTimerStart = false;
11211121
setTrayContextMenu();
11221122
selectedTask?.trackedInSeconds = valueNotifierTaskTracked.value;
11231123
stopTimer();
@@ -1158,8 +1158,8 @@ class _HomePageState extends State<HomePage> with TrayListener, WindowListener {
11581158
isHaveActivity = true;
11591159
} else if (strEvent == 'screen_is_locked') {
11601160
// auto stop timer dan ambil screenshot-nya
1161-
if (isTimerStart) {
1162-
isTimerStart = false;
1161+
if (isGlobalTimerStart) {
1162+
isGlobalTimerStart = false;
11631163
setTrayContextMenu();
11641164
stopTimer();
11651165
finishTime = DateTime.now();
@@ -1271,7 +1271,7 @@ class _HomePageState extends State<HomePage> with TrayListener, WindowListener {
12711271
// stop timer-nya jika permission screen recording-nya tidak diallow-kan atau
12721272
// gagal ambil screenshot-nya di end time
12731273
stopTimer();
1274-
isTimerStart = false;
1274+
isGlobalTimerStart = false;
12751275
setTrayContextMenu();
12761276
selectedTask = null;
12771277
setState(() {});
@@ -1294,7 +1294,7 @@ class _HomePageState extends State<HomePage> with TrayListener, WindowListener {
12941294
// stop timer-nya jika isForceStop bernilai true
12951295
listPathScreenshots.clear();
12961296
stopTimer();
1297-
isTimerStart = false;
1297+
isGlobalTimerStart = false;
12981298
setTrayContextMenu();
12991299
selectedTask = null;
13001300
setState(() {});

lib/feature/presentation/page/setting/setting_page.dart

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ import 'package:flutter/scheduler.dart';
2727
import 'package:flutter_bloc/flutter_bloc.dart';
2828
import 'package:go_router/go_router.dart';
2929
import 'package:launch_at_startup/launch_at_startup.dart';
30+
import 'package:tray_manager/tray_manager.dart';
3031
import 'package:window_manager/window_manager.dart';
3132

3233
class SettingPage extends StatefulWidget {
@@ -1002,6 +1003,25 @@ class _SettingPageState extends State<SettingPage> {
10021003
}
10031004

10041005
Future<void> doLogout() async {
1006+
if (isGlobalTimerStart) {
1007+
showDialog(
1008+
context: context,
1009+
builder: (context) {
1010+
return AlertDialog(
1011+
title: Text('warning'.tr()),
1012+
content: Text('please_stop_the_timer_if_you_want_to_logout'.tr()),
1013+
actions: [
1014+
TextButton(
1015+
onPressed: () => context.pop(),
1016+
child: Text('dismiss'.tr()),
1017+
),
1018+
],
1019+
);
1020+
},
1021+
);
1022+
return;
1023+
}
1024+
10051025
final isLogout = await showDialog(
10061026
context: context,
10071027
builder: (context) {

0 commit comments

Comments
 (0)