Skip to content

Handle DioException when network error #284

Description

@Dao-you

當網路不可及時,處理 DioException 錯誤

背景

當網路請求發生錯誤時,套件會拋出 DioException 。
先前因為還沒討論好相對應的 UX 設計,所以暫時沒有處理。目前的情況是這個錯誤會一路被拋到最外層,被 Firebase Crashlytics 或是錯誤提示對話框(Debug mode) 接起來。

Image Image

理想行為

應該有個統一的 DioException 處理方式,當 repo layer 嘗試更新但是網路不可及時,應維持顯示目前的快取內容並且透過 ScaffoldMessanger 顯示「網路更新錯誤,顯示快取內容」等提示。

建議實作方向 (AI Generated)

  • 新增共用 DioException 判斷工具,例如 isNetworkUnavailable(error),集中判斷 connectionError、timeout、SocketException 等網路不可及情境。

  • Repository 維持目前快取優先策略:watchX() 背景更新失敗時不讓 stream 進入 error state,繼續顯示 Drift 快取資料。

  • UI 的 pull-to-refresh 統一包一層 helper,例如 runRefreshWithCachedFallback(),捕捉網路型 DioException 後顯示 SnackBar:「網路更新錯誤,顯示快取內容」。

  • 不建議 repository 直接呼叫 ScaffoldMessenger。若背景自動更新也要提示,應透過 callback / UI event provider / repository event bus 通知 UI,由畫面或 root shell 顯示 SnackBar。

  • i18n 新增共用字串,例如 errors.networkRefreshFailedUsingCache,中英各一份,避免各畫面硬編訊息。

  • Crashlytics 應忽略預期中的網路不可及錯誤,只記錄非預期錯誤或解析/資料不一致問題,避免把離線情境當 crash noise。

  • 優先落地範圍:先處理 CourseTableScreenProfileScreen 等已有 RefreshIndicator 的手動刷新;背景自動刷新提示可作第二階段。

Metadata

Metadata

Assignees

Labels

P1High

Type

No fields configured for Bug.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions