CCExtractor / CCExtractor/taskwarrior-flutter
[Bug] Intent Caching and BottomSheet Stacking via Android Widgets & Deep Links
- Ngôn ngữ chính
- Dart
- Star
- 244
- Fork
- 179
- Merge trung bình
- 12 giờ 42 phút
- Pull request đã merge (30 ngày)
- 2
Mô tả
### Describe your issue
When the application is launched from the background via an Android Home Screen Widget or Quick Action intent, GetX state management encounters two severe routing and context synchronization bugs:
1. **The Widget Controller Cache Loop:** Tapping "Task 1" on a widget correctly loads the Detail Route and instantiates a `DetailRouteController` for Task 1. However, if the app is backgrounded and the user taps a widget for "Task 3", GetX recognizes that `DETAIL_ROUTE` is already active in memory. Instead of routing the new UUID, GetX lazily reuses the cached `DetailRouteController`, keeping "Task 1" permanently stuck on screen for all subsequent widget taps.
2. **The "Black Screen" Context Void:** The Floating Action Button natively launched `showModalBottomSheet`. If a user tapped a "Quick Action" or "Widget Add Task" intent while the app was backgrounded with a native sheet open, GetX was unable to detect the native sheet via `Get.isBottomSheetOpen`. GetX stacked the new intent sheet on top. Upon saving, the system popped the GetX sheet, stranding the user inside an orphaned/black void natively.
### Steps to reproduce
**Widget Caching Loop:**
1. Tap Task 1 from an Android Widget.
2. Press the Android Home button to background the app.
3. Tap Task 3 from an Android Widget.
**Result:** The app incorrectly displays Task 1.
**Black Screen Void:**
1. Tap the in-app `+` FAB to open the Add Task modal.
2. Press the Android Home button to background the app.
3. Long-press the App Icon and trigger the "Add Task" Quick Action intent.
4. Fill out the task details and hit Save.
**Result:** The UI dismisses the active modal but reveals a broken/black overlay instead of the Home screen.
### What was the expected result?
The app should cleanly unmount stale overlays (like the native FAB bottom sheet) and explicitly purge legacy controllers (`DetailRouteController`) from memory before injecting new routing intents from a warm start. The new task should load accurately, and closing a bottom sheet should safely return the user to the underlying UI without crashing into a black screen.
### Put here any screenshots or videos (optional)
https://github.com/user-attachments/assets/5d021ebe-5f77-475e-b0d0-e6d84e01a383
### How can we contact you (optional)
_No response_
### Would you like to work on this issue?
Yes
### By submitting this issue, I have confirmed that:
- [x] I have starred the repo ⭐ and watched 👀 it on GitHub and followed the contribution guidelines.
Hướng dẫn đóng góp
Hướng nghiên cứu
Bắt đầu bằng cách lần theo các điểm vào Android Home Screen Widget và Quick Action/deep-link vào Flutter, sau đó kiểm tra DetailRouteController và luồng showModalBottomSheet native của FAB. Tái hiện cả hai kịch bản khởi chạy trong nền và xác minh rằng một task mới được mở đúng cách, đồng thời việc lưu một sheet được điều khiển bằng intent sẽ quay lại màn hình Home bên dưới mà không có lớp phủ màu đen.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Đánh giá
- Công nghệ
- android, dart, flutter
- Lĩnh vực
- mobile
- Loại issue
- Lỗi
- Độ khó
- 4/5
- Thời gian dự kiến
- 3-5 ngày
- Mức độ hoạt động
- Đình trệ
- Độ rõ ràng
- Khá rõ ràng
- Mức phù hợp với người mới
- 45/100