Baru-baru ini ada artikel tentang arsitektur bersih di Flutter. Saya ingin membahas topik dari sudut yang sedikit berbeda dan mengembangkan topik mengelola negara global dengan Redux.
Dan sedikit tentang diri saya: Saya telah menciptakan produk komersial selama sekitar 10 tahun, di mana saya telah bekerja di Flutter selama hampir 2 tahun, dan saya berhasil mencoba semua manajer negara terkenal. Beberapa membangkitkan ingatan netral - BLoC, Penyedia, kelas blok global dengan aliran mereka, dan beberapa yang negatif - MobX.
Akibatnya, untuk diri saya sendiri, saya memilih Redux untuk status global dan perpustakaan untuk mengimplementasikan struktur aplikasi:
built_value
built_collection
rxdart (opsional)
flutter_simple_dependency_injection (atau dioc)
built _ redux
Ini adalah set perpustakaan minimal saya untuk mengimplementasikan proyek di tingkat mana pun.
Sekarang selangkah demi selangkah
Struktur umum aplikasi
Struktur umum aplikasi
Folder di root semuanya standar, dibuat secara otomatis, tetapi ada yang tambahan:
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 , )
Dan saya ingin menambahkan bahwa tidak ada proyek sederhana. Terkadang proyek hewan peliharaan tumbuh menjadi produk komersial. Dan kemudian, setelah arsitektur yang dirancang dengan tidak tepat, operasi normal mungkin menjadi tidak mungkin. Saya memiliki proyek, juga di Flutter, yang, demi kepentingan, saya coba tulis melalui arsitektur MobX. Proyek telah berkembang. Menjadi, secara halus, tidak nyaman untuk bekerja, saya harus menulis ulang semuanya di Redux.
Tujuan artikel ini adalah untuk menarik perhatian pengembang pemula atau berpengalaman ke arsitektur Redux yang telah berkinerja baik pada produk komersial yang sangat besar dengan puluhan ribu pengguna harian. Dia bertahan dan bertahan dengan kedatangan / keberangkatan rekan kerja, pengenalan / penghapusan berbagai fitur.