Flutter | Mahmoud Azab
10.5K subscribers
1.82K photos
135 videos
10 files
299 links
اسألني في اي مشكله ان شاء الله أقدر اساعدك
🎃 @mahmoud_azab99 🎃
Download Telegram
يسعد أوقاتكم بكل الخير, بدايةً قبل قراءتك للمنشور علّق بالصلاة على النبي, ثم أكمل قراءة.

التحديثات الجديدة الخاصة بالدارت وفلاتر دسمة جدًا وكثيرة ولا يمكن إجمالها بمنشور, لذلك اليوم سنتحدث عن تحديثات الدارت فقط.

جديد لغة دارت 3.0
أولًا:
Dart Portability:
أصبح بالإمكان ترجمة أكواد dart للعمل على بيئتين جديدتين:
1. Linux RISC-V
2. WebAssembly
وحنتكلم عن الWebAssembly (WASM).
زي ما أنتوا عارفين المشاريع المكتوبة بفلاتر يمكن ترجمتها للعمل على بيئات متعددة, وكذلك يمكن إنشاء تطبيق ويب منها.

دارت يترجم أكواده لما يقابله بالjs كون المتصفحات تتعامل مع الجافاسكريبت (وليس الدارت).

الجديد هنا أنه أصبح بالإمكان تحويل المشروع ل WebAssembly للحصول على أداء أسرع وثقل أقل على الرام.

ثانيًا: Patterns
المقصود بها طرق كتابة أكوادك بشكل أكثر تعبيرًا.

تحديث 1: multiple returns
ويقصد بها أن تعيد أكثر من ناتج للميثود. (بديل الtuple).
لو افترضنا أنك تريد إرجاع بيانات سيارة من ميثود ما (الاسم وسنة الانتاج),
الطريقة الأولى والقديمة أنك تعمل class, وتعرف فيه الاسم وسنة الانتاج, ثم تنشء منه object وتسند له القيم وترجعه للميثود.
class Car{
final String name;
final int year;
Car(this.name,this.year);
}

Car someMethod(String name){
var car = Car(name,2013);
return car;
}

void main(){
var car = someMethod('skoda');
print('${car.name} ${car.year}');
}

الجديد الآن تستطيع إرجاع أكثر من قيمة معًا.
بديل الكود السابق بنفس الناتج:

(String,int) someMethod(String name){
return (name,2013);
}

void main(){
var car = someMethod('skoda');
print('${car.$1} ${car.$2}');
}

أو

void main(){
var (name,year) = someMethod('skoda');
print('$name $year');
}

تحديث 2:
بالإصدارات السابقة كنا نستخدم الif/else في تخصيص List وقت كتابة الكود.
الآن أصبح استخدام if/else على الnamed arguments بنفس الطريقة.
مثال:
ListTile(
title:Text('Some list tile'),
if(enableSubtitle)
...(subTitle:Text('Some subtitle')));

تحديث 3:
الswitch/case كانت تتطلب أمرين:
الأول أنك تمرر constants لcases
الثاني أنك تنهي كل case ب break;

الأمر الأول, أصبحت الcase أكثر مرونة,
مثلًا:
void someMethod(){
switch(something){
case condition1:
..
case condition2:
...
case condition3 when condition 4:
...
default:
...
}
}

الأمر الثاني, بالنسبة لجملة break; سيتم الاستغناء عنها نهاية الcase. لأنها فعليًا بدون معنى ولا قيمة (بس هما ضافوها من باب هذا ما وجدنا عليه آباؤنا).

الأمر الثالث:
بالإمكان دمج أكثر من case بنفس الcase بدلًا من أسطر متتابعة:
مثلًا
switch(someThing){
case condition1:
case condition2:
case condition3:
//your code
}

يمكن كتابتها كذلك:

switch(someThing){
case condition1 condition2 condition3:
//your code
}
مثل ما أشرنا بالأعلى أصبحت مرنة ولا تتطلب وسيطات ثابتة.

الأمر الرابع:
بالإمكان استخدام معاملات المقارنة مباشرة بدون الإشارة كل مرة للمتغير اللي داخل switch:
مثلًا:
switch(age){
case age<5:
...
case age>5 && age <10:
...
}

صار ممكن اختصارها كالتالي:
switch(age){
case <5:
...
case >5 && <10:
...
}

تحديث 4:
تفنيط (فكفكة الjson) والتعامل معه - json
destructuring
لاحظ هالمثال:
var json = {'car':['skoda',2013]};

switch(json){
case {'user':[String name,int year]}:
print('The car $name made in $year');
default:
print('Unkown json pattern');
}

تحديث 5:
تفنيط الObject والتعامل معه: Object destructuring
لاحظ هالمثال:
var cars = {'Skoda':2013, 'Kia':2019};
for(var MapEntry(:name,:year) in cars.entries)
{
print('$name made in $year');
}

هذا جزء من التحديثات المعلنة علمًا بأن النسخة 3.0 من الدارت لم تنزل stable بل ما زالت في dev channel.

بالتوفيق لكم, ولا تنسى تعلّق بالصلاة على النبي - صلى الله عليه وسلم-.

#flutter_forward
#dart_updates
#منقول
25👍10🔥1
مهم جدا

, ملخص لل update الجديد في فلاتر لموضوع الحماية الذي تم الإعلان عنهُ في الحدث الجديد يوم أمس .
تكلموا عن هذا الموضوع فريق فلاتر المتحدث :-
Godofredo Contreras و Alexander Thomas

ومن ضمن هذهِ المواضيع تطرقوا لهذه الاشياء :-
1- موضوع ال Authrizations
طبعا ملاحضة بسيطة عشان تكون المعلومه واضحة بشكل اكبر هناك فرق بين ال Authentication و ال Authorization

أفضل طريقة لتوضيح الاختلافات بين المصطلحين هي باستخدام مثال بسيط. لنفترض أنك قررت الذهاب وزيارة منزل أحد الأصدقاء. عند الوصول ، تدق على الباب ، وفتحه صديقك. وتعرف عليك (هذه هي المصادقهAuthentication)
نظرًا لأن صديقك قد تعرف عليك ، فهو الآن مرتاح للسماح لك بالدخول إلى منزله. ومع ذلك ، بناءً على علاقتك ، هناك أشياء معينة يمكنك القيام بها وأخرى لا يمكنك القيام بها (وهذا هو التفويض Authorization).
على سبيل المثال ، قد تدخل منطقة المطبخ ، لكن لا يمكنك الذهاب إلى المكتب الخاص به . بعبارة أخرى ، لديك إذن بالدخول إلى المطبخ ، لكن الدخول إلى مكتبها الخاص محظور. خلاص وهنا قالو لك خذ بالك من حمايه في هذه الموضيع عشان ما تسمح الاي حد يدخل ويأخذ صلاحيه مش مسموح له أن ياخذها إلا بعد اذن ال admin .

2- العبث مع ملفات المشروع او بيئة العمل التي يعمل عليها (السرفر الذي توجد ملفات المشروع بداخلة ) وهذا يسمى compromise source repo
مثال على ذلك :
-التلاعب بأدوات التطوير
-التلاعب ببيئة التطوير
-التلاعب في مستودعات كود المصدر (عامة أو خاصة).

3- ال (build from modified source ) والمقصود به العبث مع مصدر الكود
مثال: أنت عملت متغير ويكون هذا المتغير Global أي بمعنى أنك تقدر تستدعيه وتسند له قيمة من أي
مكان في التطبيق وبهذهِ الطريق أنت تتيح للهاكر ان يقوم بستدعاء هذا المتغير و إدخال قيمه له من أي مكان في التطبيق واستخدامه بشكل ضار لختراق البيانات ... نعطي مثال لهذا الأمر ....مثلًا أنت كنت تتحقق من أن المستخدم
هل بالفعل قد سجل الدخول الى التطبيق أم لا , وذلك عبر إستخدام متغير من نوع boolean اسمه مثلا isAuth مثلاَ طبعا بتكون قيمته مبدأياً تساوي false
وعندما المستخدم يسجل الدخول نقوم بتحويل isAuth الى true عشان لو المستخدم دخل التطبيق مره اخرى نتحقق أنه إذا كانت قيمه ال isAuth تساوي false معناه أنه ماقد سجل الدخول وفي هذه الحاله بنقول
لتطبيق خلاص دام وما سجل الدخول حولة لصفحة تسجيل الدخول وإذا كانت القيمة ب true خلاص بكذا يكون احنا متاكدين أنه المستخدم قد سجل الدخول من قبل وما يحتاج نحولة لصفحة تسجيل الدخول في كل مره يدخل على التطبيق لذلك نحوله للصفحة الرئيسية ..... تمام اوكي الامور ماشي لا حد الان تمام
بس افترض أنه المخترق وصل للمتغير تبعك الي هو (isAuth) الي انت عامله عام ويقدر اي حد يستدعية من اي مكان في التطبيق وحول قيمته الى true قبل ما يسجل الدخول اصلاً 😄 كيف بيكون الوضع....
اكيد با بيحوله للصفحة الرئسية بدون تسجيل دخول لانه اجى يفحص ال isAuth حصل انه قيمته تساوي true وهذهِ مصيبة ال Global varibales وهذا نوع من أنواع ال (compromise source repo).

4- في حالة بناء التطبيق (compromise build process) يمكن اختراق التطبيق عند بداية تشغيلة او عند عمل initialize للتطبيق
وذلك عبر حقن الذاكر المؤقته بالسلوك السيء والتلاعب بها .

3-إستخدام المكتبات او التبعيات(package) الغير موثوق بها وهذا ما يسمى ال use compromised dependence
وهذه تمثل خطر كبير على التطبيق لانه قد ربما يجيك الهاكر يستخدم بعض ال tools من الي موجوده في المكتبه لتساعدة في الحصول على بعض القيم التي اسندتها في المكتبه , ليتم اختراقك بها

وفي نهاية الفيديو قالو لك من شان تتجنب من بعض هذه المشاكل . قالوا لك يا عمي روح استخدم SLSA كمان
ركز انا قولت من بعض المشاكل مش من كل المشاكل لانه SLSA ما بيضمن لك حماية تطبيقك 100 %

* وتكلموا ايضا عن ال flutter automated publishing وعن اهميته في تجنب الكثير من الوقوع في بعض الاخطاء عند عمل publishing في كل مره بشكل يدوي .

خلاص كذا بس هذا ملخص الفيديو الخاص security بالاضافه الى بعض الحاجات الي اضفته من شان توصل الفكرة بشكل سليم .....

رابط الفيديو للحدث :-
https://youtu.be/7LFftXcw1jA
13👍12
الكوبون المجاني لكورس Flutter Clean Architecture 👌❤️
وعشان في ناس كتير بتسئل علي الكورس فعملت ليكم المرادي 2000 كوبون مجاني ❤️
متنساش التقييم و الشير ✌️👌

ممكن تقرا التقييمات قبل متدخل الكورس ✌️ واتاكد ان الكورس مناسب ليك
الكوبون المجاني للناس الغير قادرة علي شراء الكورس 👍

http://bit.ly/3WH7Mzk
او اكتب الكوبون FREE_2023_JAN_1

لو خلص خش علي دة
http://bit.ly/401F27f
او اكتب الكوبون FREE_2023_JAN_2

---
ودة كوبون علية خصم كبير جدا حوالي 70% ❤️❤️
http://bit.ly/3R8Q0DT
او اكتب الكوبون BEST_PRICE_2023_JAN
---
ودة كوبون تاني علية خصم كبير جدا 👌
https://bit.ly/3PJucwN
متنساش تقييمك للكورس ولو في اي مشاكل وجهتك تواصل معايا
بلتوفيق للجميع ❤️
9👍5🔥1🥰1
يعني ايه Mounted ؟

Mounted widget
معناه ان widget created و أصبح ليه state

Unmounted widget
معناه ان widget has disposed or closed ومش موجودة وبالتالي انفصلت عن context

طيب ولما اعمل check if the widget is mounted
معناه اني بقول هل state موجودة ولا معدتش موجودة وحصلها disposed ؟
وبالتالي معناه هل state ممكن نعملها update ولا لأ أو نستخدم context بتاعها ولا لأ ؟

مثال لإستخدامها :
مثلا لو عايز اغير رقم بعد ثانية واحدة

Future.delayed(const Duration(seconds: 30), () { setState(() { _currentPage = 5; }); });

وحطيت دا في initState

تخيل لو الصفحة حصلها disposed واتقفلت قبل الثانية ما تخلص هيحصل ايرور

setState() called after dispose()

وبالتالي الحل اننا نستخدم mounted هنا

Future.delayed(const Duration(seconds: 30), () { if (mounted) setState(() => count = 5); });

كدا شرحنا يعني ايه mounted in flutter ومعلومة مهمة mounted متاحة اننا نستخدمها فقط جوا stateful widget مش stateless widget

الجديد بأه ايه ان من أول Flutter 3.7

أصبح ممكن نستخدمهاجو الاتنين stateful widget & stateless widget
#منقول
22👍8🥰1
تم حل المشكلة لو ظهرت مع حد يتواصل معايا

السلام عليكم
في حد حدث Flutter وظهرت معاه المشكله دي
او حد يعرف حلها
للعلم انا مش مستخدم اي باكدج من اللي ظاهرين في الايرور
👍53🔥3
من مهندس أنس

مطوري Flutter/Dart! 🎉
أعلن عن إطلاق بيئة تطوير بلغة Dart لاستعمال الذكاء الاصطناعي الخاص بOpenAI، يمكنك الوصول بسهولة وكفاءة إلى جميع الAPIs على OpenAI داخل تطبيق Flutter/Dart، مما يوفر لك الوقت والجهد عند إنشاء مشاريعك الخاصة.
بتصميم API بسيط ومبهج، مما يجعل هذه المكتبة سهلة لدمجها إلى مشاريعك والبدأ في إنشاء حلول ذكية على الفور.
لذلك لماذا تنتظر؟ جرب المكتبة الآن وشاهد الفرق الذي يمكن أن يجعله في عملية تطوير مشاريع الذكاء الاصطناعي الخاص بك.
ولا تنس مشاركة رأيك واقتراحاتكة أنا دائماً أبحث عن طرق للتحسين وتحسين هذا المكتبة بشكل أكبر.
للاستعمال و التحقق, يمكنك زيارة الرابط التالي:
https://pub.dev/packages/dart_openai/
👍15🔥85😱1
🌐How to Develop Web by Flutter...
12👍2
Var and Dynamic Difference in Dart Programming
المقال كان بالعنوان ده
ايه الفرق بين Var و Dynamic🤔
طبعا احنا عارفين ان الاتنين dynamically typed data types
بس الفرق هنا 👈

(var is dynamically typed until it has not assigned any value)
بمعنى 🤔
اني خزنت مثلا متغير من نوع int مينفعش اني اغير ال type بتاعه من int. لنوع تاني زي String
ممكن اغير قيمته من int ل int بس
على عكس Dynamic فهي تسمح بكده عادي انك تغير اي نوع لنوع
اول سطرين ف ال Dynamic مش هيكون في اي error
على عكس اخر سطرين مش هيسمح ب التعديل
12👍10🔥3
حل مشكله الاقتراحات اللي مبتظهرش


حصلت الحل يا شباب ، إذا الخيارات صارت ما تظهر معكم استعملوا هذه، الطريقه ، ادخلوا الى

1 - File
2 - Setting
3- اكتبوا بالبحث Intentions
4 - في قسم الدارت راح تحصلوا خيار اسمه
Quick assist powered by the Dart Analysis
اضغطوا عليه وراح تحتل المشكلة باذن لله
21👍4🔥2👏1
لكل بيسأل ازاي نتعلم Flutter بطريقه كويسه واي المواضيع اللي نبحث عنها عشان يكون مستوانا كويس
في الصور دي عملت ليك
Flutter RoadMap 2023
تقريبا فيها كل المواضيع اللي تخليك متمكن بعد توفيق ربنا تعالي


لينك جروب الفيسبوك لو حد عنده مشكله او حد ينزل حاجه نستفاد منها

https://www.facebook.com/groups/974461593530283/?ref=share&mibextid=NSMWBT


LinkedIn profile https://www.linkedin.com/in/mazap64
21👍7🔥1