PRD: catat indikator loading produk kasir + empty/error state
This commit is contained in:
2
PRD.md
2
PRD.md
@@ -12,7 +12,7 @@
|
||||
2. `_init()` no longer waits `& _initAuth()` first. Auth check now via `_ensureSessionAndAuth()`: if refresh token expired, immediately set `_sessionExpired = true`, keep `startPolling()` alive, and show a "login ulang" message. This avoids `_loadProducts()` being blocked by a 30s timeout + 401.
|
||||
3. `_refresh()` and realtime `.stream()` products stay alive via 1-minute polling (30 default products, "Muat lebih banyak" to extend).
|
||||
- **Auth flow lengkap (2026-10-18):** `login_screen.dart` + `AuthGate` (main.dart) sudah ada & ter-wiring. Dilengkapi: `AuthGate` sekarang route ke `LoginScreen` saat `state.sessionExpired` true (bukan cuma `!isLoggedIn`) — saat session mati user dipaksa login ulang, bukan nyangkut di HomePage dengan sesi mati. `_ensureSessionAndAuth()` membedakan auth benar-benar mati (`AuthException`/refresh balikin session tak valid → `sessionExpired=true`) vs network blip (error jaringan → TIDAK tandai sessionExpired, jadi tak salah-logout saat internet putus sesaat). `refresh()` stop query saat auth mati (hindari 401 sia-sia + cukup notify agar redirect). `login()` reset `sessionExpired` + langsung muat produk/riwayat (tak tunggu poll 1 menit).
|
||||
- **Cleanup analyzer (2026-10-18):** `flutter analyze lib/` turun dari **20 issue → 0 issue**. Yang diperbaiki: hapus `_initAuth()` (sudah diganti `_ensureSessionAndAuth`), hapus class `_ProductCard` (tidak dipakai), hapus dead code ternary `submitting/cancelling ? null :` (variabel tidak pernah `true`) di Kasir & Riwayat, rename local var `_listenersAdded`/`_sheetController` → tanpa underscore (produk_screen), `print` → `debugPrint` (offline_queue_service), perbaiki guard `BuildContext` async (`context.mounted`/`parentContext.mounted`/`sheetContext.mounted`). Build APK debug sukses + terpasang & jalan normal di HP (tanpa crash).
|
||||
- **Kasir: indikator loading produk + empty/error state (2026-10-18):** setelah login user sempat melihat daftar kosong lalu produk muncul beberapa saat kemudian. Sebab otentik: `AuthGate → HomePage` render duluan, `refresh() → _loadProducts()` jalan belakangan tanpa indikator. Perbaikan kini: `AppState.productsLoading/dataReady/productsError` + `retryProducts()`; Kasir menampilkan skeleton daftar `_ProductsLoading` khusus saat muat awal, banner `Gagal memuat produk` + tombol `Coba lagi` saat error, dan empty-state `Belum ada produk`/`Tidak ditemukan` sesuai kasus. `refresh()` diberi retry 1x + try-catch internal sehingga `_loadSales()` tidak men-stop loop; LoginScreen tetap dipakai (tanpa loading global) agar pesan error/login tidak hilang.
|
||||
- Fix Gitea ROOT_URL (infra): link download APK sebelumnya mengarah ke IP Tailscale lama → fixed ke `https://git.gosambi.uk/`.
|
||||
|
||||
### v1.2.0+5 — 2026-10-17
|
||||
|
||||
Reference in New Issue
Block a user