diff --git a/app/task/[id].tsx b/app/task/[id].tsx index cab1134..3fb49d6 100644 --- a/app/task/[id].tsx +++ b/app/task/[id].tsx @@ -112,6 +112,14 @@ export default function TaskDetailScreen() { setSubtasks(result as SubtaskData[]); }; + const goBack = () => { + if (router.canGoBack()) { + router.back(); + } else { + router.replace('/'); + } + }; + const handleSave = async () => { if (saving) return; if (!task || !title.trim()) return; @@ -126,8 +134,8 @@ export default function TaskDetailScreen() { listId: selectedListId, }); await setTagsForTask(task.id, selectedTagIds); - router.back(); - } catch { + goBack(); + } finally { setSaving(false); } }; @@ -141,7 +149,7 @@ export default function TaskDetailScreen() { onPress: async () => { await deleteTask(id!); Haptics.impactAsync(Haptics.ImpactFeedbackStyle.Medium); - router.back(); + goBack(); }, }, ]); @@ -185,7 +193,7 @@ export default function TaskDetailScreen() { - router.back()} className="p-2.5" hitSlop={{ top: 8, bottom: 8, left: 8, right: 8 }}> + diff --git a/app/task/new.tsx b/app/task/new.tsx index 7789690..3d4b7cc 100644 --- a/app/task/new.tsx +++ b/app/task/new.tsx @@ -64,6 +64,14 @@ export default function NewTaskScreen() { getAllTags().then(setAvailableTags); }, []); + const goBack = () => { + if (router.canGoBack()) { + router.back(); + } else { + router.replace('/'); + } + }; + const handleSave = async () => { if (saving) return; if (!title.trim()) return; @@ -83,7 +91,7 @@ export default function NewTaskScreen() { for (const sub of pendingSubtasks) { await createTask({ title: sub, listId: selectedListId, parentId: taskId }); } - router.back(); + goBack(); } catch { // FK constraint or other DB error — fallback to inbox setSaving(false); @@ -120,7 +128,7 @@ export default function NewTaskScreen() { isDark ? 'border-[#3A3A3A]' : 'border-[#E5E7EB]' }`} > - router.back()} className="p-2.5" hitSlop={{ top: 8, bottom: 8, left: 8, right: 8 }}> +