في الآونة الأخيرة كان هناك مقال عن العمارة النظيفة في Flutter. أرغب في تغطية الموضوع من زاوية مختلفة قليلاً وتطوير موضوع إدارة الحالة العالمية باستخدام Redux.
والقليل عن نفسي: أقوم بإنشاء منتجات تجارية منذ حوالي 10 سنوات ، أعمل منها في Flutter منذ ما يقرب من عامين ، وتمكنت من تجربة جميع مديري الدولة المشهورين. يستحضر البعض ذكريات محايدة - BLoC ، Provider ، كتلة فئة عالمية بتدفقاتها الخاصة ، وبعضها سلبي - MobX.
نتيجة لذلك ، بالنسبة لي ، استقرت على Redux للحالة العالمية والمكتبات لتنفيذ هيكل التطبيق:
بنيت_القيمة
المجموعة المبنية
rxdart (اختياري)
flutter_simple_dependency_injection (أو dioc)
بنيت _ مسترجع
هذا هو الحد الأدنى من مجموعة المكتبات الخاصة بي لتنفيذ المشاريع من أي مستوى.
الآن خطوة بخطوة
الهيكل العام للتطبيق
الهيكل العام للتطبيق
جميع المجلدات الموجودة في الجذر قياسية ، ويتم إنشاؤها تلقائيًا ، ولكن هناك مجلدات إضافية:
go - hover. . , GoLang. , , , sqlite , . IDE, , SQLiteStudio. -
hover init, -
build.yaml - built_value,
analysis_options.yaml - . .
scripts - /// : , , , Flutter, . -. : prepare_app - Flutter, prepare_app_hover - hover. , ( ) dartfix -
application_bundle - . , JSON - - "" , , ..
-
Flutter-
lib :
domain - : , , , , , ,
tools -
di - ,
features - UI , ,
services - , , ,
app - . MaterialApp CupertinoApp
app_routes.dart -
Domain
models/enums
“” , , quicktype. , JSON /, .. , built_value, :
-
actions
built_redux Redux-
-
middlewares
, built_redux
-
epics
. built_redux. rxdart
-
reducers
,
-
states
Redux. - - AppState, : , .. built_redux
-
DI
. flutter_simple_dependency_injection
Features
- , . - blocs, components, widgets, tools. - widgets . (BLoC) - , . - - . StatefulWidget’
initState
- StreamBuilder’
dispose
components - -,
BLoC
- -. , di-. , -
BLoC
- BaseBloc .
BLoC-
:
,
. / , , . , - (, , , ..), ( , , , nextSubstate)
-
StreamBuilder:
, , , .
:
. , . 300 2
Redux , ,
:
, , built_value “ ”
Redux
/
. , 13 Flutter ,
, UI - , ( Redux , )
وأريد أن أضيف أنه لا توجد مشاريع بسيطة. في بعض الأحيان ينمو مشروع الحيوانات الأليفة إلى منتجات تجارية. وبعد ذلك ، بعد تصميم معماري غير صحيح ، قد يصبح التشغيل العادي مستحيلاً. لدي مشروع ، أيضًا على Flutter ، والذي ، من أجل الاهتمام ، حاولت الكتابة من خلال بنية MobX. نما المشروع. لقد أصبح الأمر ، بعبارة ملطفة ، غير مريح للعمل ، كان علي إعادة كتابة كل شيء على Redux.
كان الغرض من هذه المقالة هو لفت انتباه المطورين المبتدئين أو المتمرسين إلى بنية Redux التي حققت أداءً جيدًا في منتج تجاري كبير جدًا مع عشرات الآلاف من المستخدمين يوميًا. لقد نجت وصمدت أمام وصول / مغادرة الزملاء ، وإدخال / إزالة العديد من الميزات.