حدودا 9سال است برنامه نویسی می کنم و با جاوا شروع کردم (و هنوز هم علاقه زیادی به آن دارم) و با جاوا و کاتلین و با همچنین فلاتر و unity به صورت حرفه ای به توسعه اپلیکیشن ها و بازی ها می پردازم
معماری آینده دار Flux در فلاتر
بایک مقاله دیگر از دنیای برنامه نویسی فصل اندروید برگشتیم?
خوب در پست قبلی با این معماری جذاب کمی آشنا شدیم و مثال هایی در کاتلین برای ان زدیم، به درخواست تعداد زیادی از دوستان تصمیم گرفتیم برای فلاتر (این فریمورک جوان و جذاب) هم یک سری توضیح درباره flux و یک سورس در جهت یادگیری آن قرار بدیم
پست قبلی معماری جدید و متفاوت در اندروید
سورس کامل این آموزش در GitHub: ((در انتهای مقاله قرار داده شده است))
یک کتابخانه معماری برنامه دارت با جریان داده یک جهته با الهام از RefluxJS و Facebook’s Flux
این یک پکیچ آزمایشی است و پشتیبانی رسمی تیم Flutter را ندارد. با این حال ، استقبال فراوانی از این معماری جذاب شده!
خب این مقاله ما به این موارد تقسیم میشود:
توضیح اجمالی
در واقع flutter_flux
یک الگوی جریان داده یک جهته را اجرا می کند که از Actions
، Stores
و StoreWatchers
تشکیل شده است. این مبتنی بر w_flux است ، اما برای استفاده از Flutter به جای React اصلاح شده است.
- یک
Actions
جهش داده های برنامه را که درStores
قرار دارند آغاز می کند. - دو جهش داده ها در
Stores
باعث بازآفرینی نمای برنامه (تعریف شده درStoreWatcher
) می شود. - سوم
Widgets
های Flutter و سایر منابع تعاملActions
را در پاسخ به تعامل کاربر ارسال می کنند. - چهارم و چرخه ادامه دارد ...
Flux شامل چه مواردی است
Action
درواقع Action
فرماني است كه مي تواند ارسال شود (با بارگذاري اطلاعاتي اختياري) و گوش داده شود.
در flutter_flux
،مورد Actions
تنها عامل اصلی تغییر وضعیت برنامه هستند. اWidgets و اشیا other دیگر Actions
را در پاسخ به تعامل کاربر با نمای ارائه شده ارسال می کنند. Stores
برای این اعزام های Action
گوش می دهند و داده های داخلی خود را در پاسخ با استفاده از محموله Action
به طور مناسب تغییر می دهند.
import 'package:flutter_flux/flutter_flux.dart';
// define an action
final Action<String> displayString = new Action<String>();
// dispatch the action with a payload
displayString('somePayload');
// listen for action dispatches
displayString.listen(_displayAlert);
_displayAlert(String payload) {
print(payload);
}
BONUS: Actions
منتظر هستند!
آنها آینده ای را پس از اتمام تمام شنوندگان Action
ثبت شده ، برمی گردانند. معمولاً توصیه نمی شود از این ویژگی در کد نرمال برنامه استفاده کنید ، اما در unit test کاملاً مفید است.
Store
یک Store
یک مخزن و مدیر حالت برنامه است. کلاس پایه Store
ارائه شده توسط flutter_flux
باید متناسب با نیازهای برنامه و داده های آن گسترش یابد. بسته به پیچیدگی برنامه و معماری برنامه مورد نظر شما ، حالت برنامه ممکن است در بسیاری از فروشگاههای مستقل پخش شود.
طبق قرارداد ، داده های داخلی Store
مستقیماً قابل تغییر نیست. در عوض ، داده های Store
در پاسخ به response های Action
، تغییر شکل داخلی می دهند. در غیر این صورت باید Store
ها فقط خواندنی تلقی شوند ، و داده های مربوطه را فقط از طریق روش های گیرنده در معرض دید عموم قرار می دهند. این دسترسی محدود به داده ها تضمین می کند که یکپارچگی جریان داده های یک جهته حفظ می شود.3
یک Store
را می توان برای دریافت notification خارجی جهش های داده خود گوش داد. هر زمان داده های درون Store
تغییر داده شود ، از روش trigger
برای آگاه سازی شنوندگان ثبت شده از در دسترس بودن داده های به روز استفاده می شود. در flutter_flux
، StoreWatchers
به Store
ها گوش می دهند ، به طور معمول رندر مجدد عناصر UI را براساس داده های به روز شده Store
آغاز می کند.
import 'package:flutter_flux/flutter_flux.dart';
class RandomColorStore extends Store {
// Public data is only available via getter method
String _backgroundColor = 'gray';
String get backgroundColor => _backgroundColor;
// Actions relevant to the store are passed in during instantiation
RandomColorActions _actions;
RandomColorStore(RandomColorActions this._actions) {
// listen for relevant action dispatches
_actions.changeBackgroundColor.listen(_changeBackgroundColor);
}
_changeBackgroundColor(_) {
// action dispatches trigger internal data mutations
_backgroundColor = '#' + (new Random().nextDouble() * 16777215).floor().toRadixString(16);
// trigger to notify external listeners that new data is available
trigger();
}
}
BONUS: Stores
یک ترکیب مختصر اختیاری برای action->و data mutation(جهش داده ها) -> trigger operations. فراهم می کنند.
// verbose syntax
actions.incrementCounter.listen(_handleAction);_handleAction(payload) {
// perform data mutation
counter += payload;
trigger();
}// equivalent terse syntax
triggerOnAction(actions.incrementCounter, (payload) => counter += payload);
مثال ها
نمونه های ساده استفاده از flutter_flux را می توان در دایرکتوری مثال یافت. مثال README شامل دستورالعمل هایی برای ساخت / راه اندازی آنهاست.
مصرف خارجی
در flutter_flux
یک جریان داده یک جهته را در یک برنامه یا ماژول کد جداگانه پیاده سازی می کند. اگر از flutter_flux
به عنوان معماری داخلی کتابخانه استفاده می شود ، هنگام تعریف API خارجی باید این جریان داده داخلی در نظر گرفته شود.
- روش های خارجی API که هدف آن تغییر وضعیت داخلی است ، باید
Actions
را ارسال کند ، دقیقاً مانند هر تعامل کاربر داخلی. - روشهای API خارجی که برای پرس و جو از حالت داخلی در نظر گرفته شده اند ، باید از روشهای موجود فقط در حالت خواندن
Store
استفاده کنند. - جریانهای خارجی API که برای اطلاع رسانی به مصرف کننده در مورد تغییرات وضعیت داخلی در نظر گرفته شده اند ، باید مشابه راه اندازهای آنها از
Stores
داخلی ارسال شوند.
سورس کامل این آموزش در GitHub: ((لینک سورس کامل این آموزش))
اگر دوست دارید بیشتر با این معماری جذاب آشنا شوید در نظرات به من بگویید تا آن را به طور کامل آموزش دهم???
با معماری فلاکس بیشتر آشنا شو
برای فهم بهتر پیشنهاد میدم که این مقاله را در اینجا مطالعه کنید:
https://mohammadabdipour.medium.com/flux-and-flutter-c7483cef8e39
مطلبی دیگر از این انتشارات
خطای "سرریز پایین صفحه" ناشی از صفحه کلید در فلاتر Bottom Overflowed
مطلبی دیگر از این انتشارات
فلاتر و GRPC، بررسی عملی روی پلتفرم اندروید
مطلبی دیگر از این انتشارات
Flutter MouseRegion