يسعد أوقاتكم بكل الخير, بدايةً قبل قراءتك للمنشور علّق بالصلاة على النبي, ثم أكمل قراءة.
التحديثات الجديدة الخاصة بالدارت وفلاتر دسمة جدًا وكثيرة ولا يمكن إجمالها بمنشور, لذلك اليوم سنتحدث عن تحديثات الدارت فقط.
جديد لغة دارت 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
#منقول
التحديثات الجديدة الخاصة بالدارت وفلاتر دسمة جدًا وكثيرة ولا يمكن إجمالها بمنشور, لذلك اليوم سنتحدث عن تحديثات الدارت فقط.
جديد لغة دارت 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
//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
, ملخص لل 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
YouTube
Software supply chain security for Flutter and its ecosystem
Dart and Flutter are investing heavily in tools and services to protect their software supply chain. In this talk we will share our progress improving Flutter’s software supply chain security and the tools created to help the Flutter Ecosystem to improve…
❤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
متنساش تقييمك للكورس ولو في اي مشاكل وجهتك تواصل معايا
بلتوفيق للجميع ❤️
وعشان في ناس كتير بتسئل علي الكورس فعملت ليكم المرادي 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
متنساش تقييمك للكورس ولو في اي مشاكل وجهتك تواصل معايا
بلتوفيق للجميع ❤️
Udemy
Flutter Clean Architecture [2022] [Flutter 3] (In Arabic)
هذا الكورس يناقش أفكار ومفاهيم متقدمة في فلاتر لمن يريد زيادة خبرته وتحسين فرصته في سوق العمل
❤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
#منقول
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 وظهرت معاه المشكله دي
او حد يعرف حلها
للعلم انا مش مستخدم اي باكدج من اللي ظاهرين في الايرور
السلام عليكم
في حد حدث Flutter وظهرت معاه المشكله دي
او حد يعرف حلها
للعلم انا مش مستخدم اي باكدج من اللي ظاهرين في الايرور
👍5❤3🔥3
من مهندس أنس
مطوري Flutter/Dart! 🎉
أعلن عن إطلاق بيئة تطوير بلغة Dart لاستعمال الذكاء الاصطناعي الخاص بOpenAI، يمكنك الوصول بسهولة وكفاءة إلى جميع الAPIs على OpenAI داخل تطبيق Flutter/Dart، مما يوفر لك الوقت والجهد عند إنشاء مشاريعك الخاصة.
بتصميم API بسيط ومبهج، مما يجعل هذه المكتبة سهلة لدمجها إلى مشاريعك والبدأ في إنشاء حلول ذكية على الفور.
لذلك لماذا تنتظر؟ جرب المكتبة الآن وشاهد الفرق الذي يمكن أن يجعله في عملية تطوير مشاريع الذكاء الاصطناعي الخاص بك.
ولا تنس مشاركة رأيك واقتراحاتكة أنا دائماً أبحث عن طرق للتحسين وتحسين هذا المكتبة بشكل أكبر.
للاستعمال و التحقق, يمكنك زيارة الرابط التالي:
https://pub.dev/packages/dart_openai/
مطوري Flutter/Dart! 🎉
أعلن عن إطلاق بيئة تطوير بلغة Dart لاستعمال الذكاء الاصطناعي الخاص بOpenAI، يمكنك الوصول بسهولة وكفاءة إلى جميع الAPIs على OpenAI داخل تطبيق Flutter/Dart، مما يوفر لك الوقت والجهد عند إنشاء مشاريعك الخاصة.
بتصميم API بسيط ومبهج، مما يجعل هذه المكتبة سهلة لدمجها إلى مشاريعك والبدأ في إنشاء حلول ذكية على الفور.
لذلك لماذا تنتظر؟ جرب المكتبة الآن وشاهد الفرق الذي يمكن أن يجعله في عملية تطوير مشاريع الذكاء الاصطناعي الخاص بك.
ولا تنس مشاركة رأيك واقتراحاتكة أنا دائماً أبحث عن طرق للتحسين وتحسين هذا المكتبة بشكل أكبر.
للاستعمال و التحقق, يمكنك زيارة الرابط التالي:
https://pub.dev/packages/dart_openai/
👍15🔥8❤5😱1
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 ✅
على عكس اخر سطرين مش هيسمح ب التعديل
المقال كان بالعنوان ده✅
ايه الفرق بين 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
لكل بيسأل ازاي نتعلم Flutter بطريقه كويسه واي المواضيع اللي نبحث عنها عشان يكون مستوانا كويس
في الصور دي عملت ليك
Flutter RoadMap 2023
تقريبا فيها كل المواضيع اللي تخليك متمكن بعد توفيق ربنا تعالي
لينك جروب الفيسبوك لو حد عنده مشكله او حد ينزل حاجه نستفاد منها
https://www.facebook.com/groups/974461593530283/?ref=share&mibextid=NSMWBT
LinkedIn profile https://www.linkedin.com/in/mazap64
في الصور دي عملت ليك
Flutter RoadMap 2023
تقريبا فيها كل المواضيع اللي تخليك متمكن بعد توفيق ربنا تعالي
لينك جروب الفيسبوك لو حد عنده مشكله او حد ينزل حاجه نستفاد منها
https://www.facebook.com/groups/974461593530283/?ref=share&mibextid=NSMWBT
LinkedIn profile https://www.linkedin.com/in/mazap64
❤21👍7🔥1