The Offline Fallacy
Caching API responses isn't an "offline-first" architecture; it's just offline read access. True offline-first applications allow users to mutate data without a connection and sync seamlessly when the network returns.
The Local Database (Drift / Isar)
We treat the local database as the Single Source of Truth (SSOT). The UI only ever observes local database streams. It never awaits network calls directly for rendering.
The Mutation Queue
When a user performs an action offline:
- The action mutates the local database immediately (Optimistic UI update).
- A mutation event is serialized and pushed to a persistent local Queue.
Background Synchronization
We utilize Flutter's Workmanager to periodically attempt to flush the mutation queue to the backend. The backend handles Conflict Resolution (usually via Last-Write-Wins or vector clocks, depending on the domain requirements).
By enforcing this architecture, users experience zero loading spinners during data mutation, resulting in a perfectly fluid user experience regardless of network conditions.
مغالطة العمل بدون إنترنت
التخزين المؤقت (Caching) لاستجابات API ليس بنية "الأولوية للعمل بدون إنترنت"؛ إنه مجرد وصول للقراءة بدون اتصال. التطبيقات الحقيقية التي تعطي الأولوية للعمل بدون إنترنت تسمح للمستخدمين بتعديل البيانات دون اتصال، وتتزامن بسلاسة عند عودة الشبكة.
قاعدة البيانات المحلية (Drift / Isar)
نحن نتعامل مع قاعدة البيانات المحلية على أنها مصدر الحقيقة الوحيد (SSOT). واجهة المستخدم (UI) تراقب فقط تدفقات قاعدة البيانات المحلية، ولا تنتظر أبداً مكالمات الشبكة بشكل مباشر لعرض البيانات.
طابور التعديلات (Mutation Queue)
عندما يقوم المستخدم بإجراء وهو غير متصل:
- يقوم الإجراء بتعديل قاعدة البيانات المحلية فوراً (تحديث واجهة المستخدم المتفائل).
- يتم تسلسل حدث التعديل ودفعه إلى طابور محلي مستمر.
المزامنة في الخلفية
نستخدم Workmanager في Flutter لمحاولة تفريغ طابور التعديلات بشكل دوري إلى الواجهة الخلفية (Backend). تتولى الواجهة الخلفية حل التعارضات (عادةً عن طريق Last-Write-Wins أو ساعات المتجهات، حسب متطلبات المجال).
من خلال فرض هذه البنية، لا يواجه المستخدمون أي أيقونات تحميل أثناء تعديل البيانات، مما يؤدي إلى تجربة مستخدم سلسة تماماً بغض النظر عن ظروف الشبكة.