بحث باسم الموضوع المطلوب

جبت لكم حاجات جديدة في برمجه Flutter

تغيير لون شريط الحالة وشريط التنقل في Flutter

https://onlyflutter.com/change-the-color-of-status-bar-and-navigation-bar-in-flutter/

في Flutter، يمكنك تغيير لون شريط الحالة وأشرطة التنقل بعدة طرق. يمكنك تعيين ألوان مختلفة لكل صفحة، أو تطبيق لون عالمي على التطبيق بأكمله. في هذا المنشور، سنستعرض جميع الطرق المتاحة.


المناقشة: نمط MVVM لتطبيقات Flutter

https://chooyan.hashnode.dev/discussion-mvvm-pattern-for-flutter-apps/

MVVM هو أحد أنماط الهندسة المعمارية الأكثر شيوعًا لتطوير تطبيقات الأجهزة المحمولة. في هذه المقالة، ستتعلم كيفية تطبيق MVVM على تطبيقات Flutter، وكيف "يتناسب" مع تطوير تطبيقات Flutter، أو ربما لا.


تشغيل تطبيق Flutter على أجهزة iOS: دليل خطوة بخطوة

https://flutterdesk.com/how-to-run-flutter-app-on-ios-devices/

قد يبدو تشغيل تطبيق Flutter على نظام التشغيل iOS أمرًا صعبًا في البداية، ولكن باتباع الخطوات الصحيحة، تصبح العملية سهلة ومباشرة. سيرشدك هذا الدليل إلى كل ما تحتاج إلى معرفته لتشغيل تطبيق Flutter على جهاز iPhone أو iPad.


Flutter مقابل React Native — أيهما أفضل لمشروعك في عام 2024؟

https://www.thedroidsonroids.com/blog/flutter-vs-react-native-comparison/

لكل من Flutter وReact Native إيجابيات وسلبيات. أو ربما تفكر في استخدام React Native لتطبيقك — وهذا جيد أيضًا. باتباع هذه المقالة، ستحصل على فكرة عن التقنية الأنسب لتطبيقك.


PullingManager: تحديثات بسيطة في الوقت الفعلي لـ Flutter

https://medium.com/@ayalon.idan/pullingmanager-simple-real-time-updates-for-flutter-4c414f6f7d94/

في هذه المقالة، ستتعرف على حزمة PullingManager وما هو موجود تحت الغطاء الذي يجعل تحديثات البيانات بسيطة وصديقة للبطارية.A

إعلانات Flutter مع Google AdMob

متطلبات

لمتابعة هذا، ستحتاج إلى حساب Google AdMob. AdMob هي منصة إعلانات Google للترويج للتطبيقات المحمولة وتحقيق الدخل منها. إذا لم يكن لديك حساب AdMob بالفعل، فيمكنك التسجيل بسهولة على موقع الويب الخاص بهم https://admob.google.com/home/get-started/ .

بعد التسجيل، حان الوقت لإضافة تطبيقك إلى AdMob. فيما يلي الخطوات اللازمة:

1. انتقل إلى قسم التطبيقات وانقر فوق إضافة التطبيق .
2. اختر المنصة وأخبر AdMob إذا كان تطبيقك مدرجًا في متجر التطبيقات المدعوم .
3. املأ اسم التطبيق الخاص بك، مع الأخذ في الاعتبار أنه يمكن تغيير اسم التطبيق ولكن لا يمكن حذف التطبيق نفسه أبدًا.
بعد إنشاء تطبيقك، يمكنك متابعة إعداد إعلانات Google للجوال.
البدء باستخدام إعلانات https://pub.dev/packages/google_mobile_ads/ Google للجوال
الطريقة الأكثر مباشرة لإضافة إعلانات إلى تطبيق Flutter الخاص بك هي استخدام حزمة إعلانات Google Mobile Ads . أنشأت Google هذه الحزمة لتبسيط عملية إضافة الإعلانات باستخدام https://pub.dev/packages/google_mobile_ads/ AdMob.

1. تثبيت إعلانات Google للجوال
عملية التثبيت بسيطة. ما عليك سوى تنفيذ الأمر التالي داخل مشروعك لإضافة حزمة إعلانات Google Mobile.
cmd,,
flutter pub add google_mobile_ads
,,
بمجرد تنفيذ الأمر، تحقق من ملفك pubspec.yamlبحثًا عن التبعيات المضافة. يجب أن ترى حزمة إعلانات Google Mobile مضمنة في قسم التبعيات، مثل هذا:
cmd,,
dependencies:
  flutter:
    sdk: flutter
  google_mobile_ads: ^5.0.0
,,
2. إضافة معرف التطبيق من Google AdMob
الآن بعد أن قمنا بتثبيت الحزمة، يتعين علينا ربط تطبيق Flutter الخاص بنا بـ AdMob. يمكن القيام بذلك عن طريق إضافة معرف التطبيق من AdMob إلى تطبيقنا. يمكن العثور على معرف التطبيق في قسم تطبيقات AdMob ويمكن نسخه بسهولة بالنقر فوقه. تأكد من عدم مشاركة معرف التطبيق مع أي شخص.
بعد نسخ معرف التطبيق ، يمكننا إضافته داخل تطبيقنا. يختلف التنفيذ وفقًا للمنصة. راجعها أدناه:

بالنسبة لنظام Android، نحتاج إلى إضافة إدخال بيانات تعريفية جديد داخل android/app/src/main/AndroidManifest.xmlالملف. تأكد من وضع معرف التطبيق<application> داخل العلامة وليس داخل <activity>العلامة.
cmd,,
<application>
  ...
  <meta-data android:name="com.google.android.gms.ads.APPLICATION_ID"
             android:value="ca-app-pub-????????????????~??????????"
   />
</application>
,,
لا تنسى استبدال علامات الاستفهام في القيمة بمعرف التطبيق الخاص بك .

بالنسبة لنظام iOS ، نحتاج إلى إضافة إدخال داخل ios/Runner/Info.plistالملف. يمكن القيام بذلك عن طريق إضافة مفتاح جديد داخل <dict>العلامة. استبدل النص الموجود في العلامة بمعرف التطبيق<string> الخاص بك .
cmd,,
<key>GADApplicationIdentifier</key>
<string>ca-app-pub-????????????????~??????????</string>
,,
بعد هذه التغييرات، يجب أن يكون التطبيق متصلاً بـ AdMob.

3. تغيير minSdkVersion إلى 21
تتطلب حزمة إعلانات Google Mobiles منا تغيير minSdkVersion إلى أو أعلى. يمكن إجراء 21التغيير داخل ملف مشروعنا.minSdkVersionandroid\app\build.gradle

cmd,,

defaultConfig {
    applicationId "com.example.ads_with_google_admob"
    minSdkVersion 21
    targetSdkVersion flutter.targetSdkVersion
    versionCode flutterVersionCode.toInteger()
    versionName flutterVersionName
}

,,

تنفيذ AdBanner من Google في Flutter
بعد تثبيت الحزمة وإضافة معرف التطبيق الخاص بنا إلى تطبيق Flutter، حان الوقت الآن لتنفيذ إعلاننا الأول. في هذا المنشور، سنقوم بإنشاء إعلان بانر. عادةً ما يتم عرض إعلانات البانر في أسفل التطبيق.

يعتبر الكود الأولي للمشروع بسيطًا جدًا، حيث يتم كتابة كل شيء داخل main.dartالملف.
cmd,,

import 'package:flutter/material.dart';

void main() {
  runApp(const MyApp());
}

class MyApp extends StatefulWidget {
  const MyApp({super.key});

  @override
  State<MyApp> createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        body: Column(
          children: [
            const Expanded(child: SizedBox.shrink()),
          ],
        ),
      ),
    );
  }
}

,,

نظرًا لأن إعلان البانر سيُعرض في الأسفل، فلدينا أداة Columnداخل Scaffold. داخل Columnالأداة، لدينا Expandedأداة يمكنك استبدالها بسهولة بالأداة (الأدوات) المرغوبة حسب اختيارك. في الوقت الحالي، تحتوي على SizedBox.shrink()أداة كعنصر نائب.

إضافة BannerAd
لإضافة أي إعلان باستخدام حزمة إعلانات Google Mobile Ads، يتعين علينا التأكد من تهيئة نموذج إعلانات MobileAds. يجب عليك دائمًا القيام بذلك عند بدء تشغيل التطبيق.

في الكود أدناه نبدأ باستيراد حزمة إعلانات Google Mobile. داخل الدالة mainنستدعي WidgetsFlutterBinding.ensureInitialized();متبوعًا بـ MobileAds.instance.initialize();. يجب استدعاؤها بهذا الترتيب لأنه قبل MobileAdsتهيئة المثيل، يتعين علينا التأكد من WidgetsFlutterBindingتهيئة .

cmd,,

import 'package:flutter/material.dart';
import 'package:google_mobile_ads/google_mobile_ads.dart';

void main() {
  WidgetsFlutterBinding.ensureInitialized();
  MobileAds.instance.initialize();

  runApp(const MyApp());
}

class MyApp extends StatefulWidget {
  const MyApp({super.key});

  @override
  State<MyApp> createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  BannerAd? _bannerAd;

  @override
  void initState() {
    super.initState();
    _createBannerAd();
  }

  Future<void> _createBannerAd() async {
    _bannerAd = BannerAd(
      adUnitId: 'ca-app-pub-3940256099942544/6300978111',
      size: AdSize.banner,
      request: const AdRequest(),
      listener: BannerAdListener(
        onAdLoaded: (Ad ad) {},
        onAdFailedToLoad: (Ad advertisement, LoadAdError error) =>
            advertisement.dispose(),
      ),
    )..load();
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        body: Column(
          children: [
            const Expanded(child: SizedBox.shrink()),
            if (_bannerAd != null)
              Center(
                child: SizedBox(
                  width: _bannerAd?.size.width.toDouble(),
                  height: _bannerAd?.size.height.toDouble(),
                  child: AdWidget(ad: _bannerAd!),
                ),
              ),
          ],
        ),
      ),
    );
  }
}

,,

بعد التهيئة، نكون مستعدين لاستخدام BannerAd. يمكن عرض كل إعلان من حزمة إعلانات Google Mobile باستخدام AdWidget. ومع ذلك، نحتاج إلى ضمان تحميل الإعلان قبل إضافته إلى AdWidget.

لهذا السبب، نستخدم initStateالدالة التي تستدعي _createBannerAdالدالة. داخل _createBannerAdالدالة، نقوم بتعيين مثيل جديد للمتغير BannerAdالخاص بنا _bannerAd.

فئة BannerAd
BannerAdيتم تعيين المعرف الذي adUnitIdفي هذا المثال على معرف وحدة الإعلان الاختباري المخصصة لنظام Android. ولكن يمكن أيضًا استبدال هذا المعرف بمعرف وحدة الإعلان الاختباري المخصصة لنظام iOS.

يحتوي كل إعلان من إعلانات Google Mobile Ads SDK على وحدة اختبار مخصصة. يمكنك الاطلاع على معرفات وحدة اختبار الإعلانات المخصصة لنظامي التشغيل Android وiOS أدناه:

android 
ca-app-pub-3940256099942544/6300978111
iOS
ca-app-pub-3940256099942544/2934735716

علاوة على ذلك، يتم تحديد حجم الإعلان باستخدام AdSize.banner. لدينا الطلب والمستمع الذي يمكن استخدامه لتنفيذ الإجراءات كلما تم تحميل الإعلان بنجاح أو لا.

وأخيرًا، نستدعي load()الوظيفة باستخدام تدوين الشلال (..)، والذي يسمح لنا باستدعاء الوظيفة على الكائن دون الحاجة إلى إنشاء متغير منفصل له.

الآن وبعد BannerAdتحميل الملف بنجاح، لا يزال يتعين علينا إضافته إلى ملفنا AdWidget. يتم ذلك عبر الإنترنت 52. يمكنك أن ترى أننا نستخدم أيضًا عبارة if لإظهار فقط AdWidgetعندما _bannerAdلا يكون المتغير null.

سيؤدي تشغيل الكود أعلاه إلى ما يلي:
كما ترى، قمنا بتحميل إعلان البانر الأول بنجاح. ومع ذلك، لم نكن راضين تمامًا بعد، لأن إعلان البانر لا يستخدم العرض الكامل لشاشتنا.
طلب حجم AdBanner
للتأكد من أن إعلان البانر الخاص بنا يشغل العرض الكامل، يمكننا طلب الحجم باستخدام getCurrentOrientationAnchoredAdaptiveBannerAdSizeالدالة. تعيد هذه الدالة حجم الإعلان بالعرض المحدد والارتفاع المحسن من قِبل Google لإنشاء ملف BannerAd.

cmd,,

import 'package:flutter/material.dart';
import 'package:google_mobile_ads/google_mobile_ads.dart';

void main() {
  WidgetsFlutterBinding.ensureInitialized();
  MobileAds.instance.initialize();

  runApp(const MyApp());
}

class MyApp extends StatefulWidget {
  const MyApp({super.key});

  @override
  State<MyApp> createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  BannerAd? _bannerAd;

  @override
  void didChangeDependencies() {
    super.didChangeDependencies();
    _createBannerAd();
  }

  Future<void> _createBannerAd() async {
    await AdSize.getCurrentOrientationAnchoredAdaptiveBannerAdSize(
      MediaQuery.sizeOf(context).width.truncate(),
    ).then((AnchoredAdaptiveBannerAdSize? size) => _bannerAd = BannerAd(
          adUnitId: 'ca-app-pub-3940256099942544/6300978111',
          size: size ?? AdSize.banner,
          request: const AdRequest(),
          listener: BannerAdListener(
            onAdLoaded: (Ad ad) {},
            onAdFailedToLoad: (Ad advertisement, LoadAdError error) =>
                advertisement.dispose(),
          ),
        )..load());
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        body: Column(
          children: [
            const Expanded(child: SizedBox.shrink()),
            if (_bannerAd != null)
              Center(
                child: SizedBox(
                  width: _bannerAd?.size.width.toDouble(),
                  height: _bannerAd?.size.height.toDouble(),
                  child: AdWidget(ad: _bannerAd!),
                ),
              ),
          ],
        ),
      ),
    );
  }
}

,,

يتعين علينا استدعاء getCurrentOrientationAnchoredAdaptiveBannerAdSizeالدالة قبل إنشاء ملف . وتحميل ملف BannerAd. لذلك ننتظر الدالة ونستخدم thenمعاودة الاتصال لتعيين ملف . BannerAdللمتغير _bannerAd. لاحظ أن الحجم الذي يتم إرجاعه من الدالة قابل للعدم. ولهذا السبب، ما زلنا نريد أن يكون AdSize.bannerهذا هو البديل.

يتعين علينا أيضًا تغيير initStateالوظيفة بالوظيفة didChangeDependenciesلتجنب الوقوع في مشكلات البناء.

مع تطبيق هذه التغييرات، سنحصل على إعلان البانر التالي:
يبدو هذا أفضل بكثير ويمكننا الآن الانتقال إلى الخطوة الأخيرة، وهي عرض إعلانات البانر الحقيقية.

إنشاء وحدة إعلانية جديدة لعرض الإعلانات باستخدام Google AdMob

حتى الآن، كنا نستخدم وحدات الإعلانات الاختبارية المخصصة لعرض الإعلانات باستخدام Google AdMob. ومع ذلك، نريد استخدام معرف وحدة الإعلان الخاصة بنا . لذلك، يتعين علينا إنشاء وحدة إعلانية جديدة في AdMob.

1. إنشاء وحدة إعلانية بانر في AdMob
1. في قسم التطبيقات في AdMob، يتعين علينا تحديد التطبيق الخاص بنا، ثم النقر على زر إضافة وحدة إعلانية أو الانتقال إلى قسم وحدات الإعلان .
2. بمجرد النقر على الزر، يتعين علينا تحديد تنسيق الإعلان، والذي سيكون الشعار في حالتنا.
3. بعد تحديد التنسيق، يتعين علينا تسمية إعلان البانر الخاص بنا، وتأكد من اختيار اسم وصفي لتسهيل العثور عليه. يمكنك إلقاء نظرة على الإعدادات المتقدمة، ومع ذلك، يمكن دائمًا تغييرها لاحقًا. انقر فوق إنشاء وحدة إعلانية لإنهاء عملية الإنشاء.
4. الآن بعد إنشاء وحدة الإعلان الخاصة بنا، يمكنك نسخ المعرف الثاني الذي تم تقديمه. المعرف الأول المقدم هو معرف التطبيق ، والذي أضفناه بالفعل إلى تطبيقنا.
ضع في اعتبارك أن الأمر قد يستغرق بعض الوقت قبل أن تصبح وحدة الإعلان الخاصة بك جاهزة للاستخدام. يذكر AdMob أن الأمر قد يستغرق ما يصل إلى ساعة.


2. الحصول على معرف اختبار الإعلان من AdMob
قبل أن نضيف معرف وحدة الإعلان إلى تطبيقنا، يتعين علينا الحصول على معرف الإعلان الخاص بنا . كل جهاز لديه معرف إعلان . في حالتنا، يتم استخدام هذا المعرف لمساعدة AdMob في التعرف على الجهاز كجهاز اختبار. سيساعدك هذا على تجنب الوقوع في مشكلات مع AdMob. بالطبع، لا يريدون منك تشغيل إعلانات فعلية عند التطوير. أوصي دائمًا بالحصول على معرف الإعلان الخاص بهاتفك الفعلي وجميع معرفات الإعلانات الخاصة بأجهزة الاختبار الخاصة بك.

يوضح ملف GIF أدناه كيفية الحصول على معرف الإعلان على محاكي Android . هذا لأغراض العرض التوضيحي لأن كل محاكي يتم التعرف عليه تلقائيًا كجهاز اختبار.
الخطوات المتبعة في GIF هي:

  1. انتقل إلى الإعدادات.
  2. ابحث عن "الإعلانات".
  3. انقر على الإعلانات .
  4. انقر فوق الإعلانات مرة أخرى.
  5. يتم عرض معرف الإعلان في منتصف الشاشة.
وبطبيعة الحال، سيكون هذا مختلفًا بالنسبة للمنصات والأجهزة الأخرى.

3. استخدام وحدة إعلانات البانر في تطبيقنا
في mainوظيفتنا نريد تحديث تكوين الطلب باستخدام updateRequestConfigurationالوظيفة. تأخذ هذه الوظيفة RequestConfigurationوداخل هذا التكوين، يمكننا إضافة مجموعة من معرفات الإعلان .

cmd,,

import 'package:flutter/material.dart';
import 'package:google_mobile_ads/google_mobile_ads.dart';

Future<void> main() async {
  WidgetsFlutterBinding.ensureInitialized();
  MobileAds.instance.initialize();

  await MobileAds.instance.updateRequestConfiguration(

    RequestConfiguration(

      testDeviceIds: [

        '2793ca2a-5956-45a2-96c0-16fafddc1a15',

      ],

    ),

  );


  runApp(const MyApp());
}

class MyApp extends StatefulWidget {
  const MyApp({super.key});

  @override
  State<MyApp> createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  BannerAd? _bannerAd;

  @override
  void didChangeDependencies() {
    super.didChangeDependencies();
    _createBannerAd();
  }

  Future<void> _createBannerAd() async {
    await AdSize.getCurrentOrientationAnchoredAdaptiveBannerAdSize(
      MediaQuery.sizeOf(context).width.truncate(),
    ).then((AnchoredAdaptiveBannerAdSize? size) => _bannerAd = BannerAd(
      adUnitId: 'ca-app-pub-????????????????/??????????',

      size: size ?? AdSize.banner,
      request: const AdRequest(),
      listener: BannerAdListener(
        onAdLoaded: (Ad ad) {},
        onAdFailedToLoad: (Ad advertisement, LoadAdError error) =>
            advertisement.dispose(),
      ),
    )..load());
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        body: Column(
          children: [
            const Expanded(child: SizedBox.shrink()),
            if (_bannerAd != null)
              Center(
                child: SizedBox(
                  width: _bannerAd?.size.width.toDouble(),
                  height: _bannerAd?.size.height.toDouble(),
                  child: AdWidget(ad: _bannerAd!),
                ),
              ),
          ],
        ),
      ),
    );
  }
}

,,

لإضافة معرف وحدة الإعلان الجديدة، يتعين علينا استبدال معرف وحدة الإعلان المخصصة بالمعرف الذي أنشأناه. لقد قمت بإخفاء معرفي لأن هذه المعرفات لا ينبغي مشاركتها. بمجرد إجراء التغيير، يجب أن ترى إعلانًا مثل الإعلان الموضح أدناه:
تأكد من ذكر "Test Ad" على أجهزة الاختبار الخاصة بك. وإلا، فلن تضف معرف الإعلان الصحيح إلى testDeviceIdsالمصفوفة. أما على جميع الأجهزة الأخرى، فسوف تعرض إعلانات فعلية.

خاتمة
في هذه المقالة، قمنا بنجاح بتنفيذ إعلانات باستخدام Google AdMob من خلال عرض إعلان بانر باستخدام حزمة إعلانات Google Mobile. لقد تعلمت كيفية ربط Google AdMob بتطبيق Flutter الخاص بك. وفي الوقت نفسه، قمت أيضًا بإنشاء وحدة إعلانية أولى واستخدمتها لعرض إعلان فعلي. تذكر أنه يمكنك دائمًا استخدام وحدات الإعلانات المخصصة من Google للاختبار.

ملاحظة لبعض مستخدمي تطبيق اعلام تقني: إذا لم تشاهد الصور، انتقل إلى المتصفح لمشاهدة كل شيء.

أهم أوامر ال Git

أوامر أساسية:

git init:

يستخدم لإنشاء مستودع Git جديد في الدليل الحالي.

git clone: 

يستخدم لاستنساخ مستودع موجود إلى دليل محلي.

git add: 

يضيف التغييرات في الملفات إلى منطقة التجميع (staging area) استعدادًا للإلتزام.

git commit: 

يحفظ التغييرات الموجودة في منطقة التجميع إلى سجل الإصدارات.

git status: 

يعرض حالة المستودع الحالي، مثل الملفات المعدلة والمضافة والجاهزة للإلتزام.

git diff: 

يعرض الاختلافات بين الإصدارات المختلفة من الملفات.

أوامر إدارة الفروع:

git branch: 

يستخدم لعرض قائمة الفروع الموجودة وإنشاء فروع جديدة.

git checkout: 

يتيح لك الانتقال بين الفروع المختلفة.

git merge: 

يدمج تغييرات فرع ما في فرع آخر.

أوامر التفاعل مع المستودعات البعيدة:

git remote: 

يستخدم لإدارة المستودعات البعيدة المرتبطة بالمستودع المحلي.

git push: 

يدفع التغييرات المحلية إلى المستودع البعيد.

git pull: 

يجلب التغييرات من المستودع البعيد ويدمجها في المستودع المحلي.

git log: 

يعرض سجل الإصدارات.

git reset: 

يستخدم لإلغاء التغييرات الأخيرة.

git revert: 

يستخدم لإلغاء تأثير إلتزام معين.

git stash:

كم عدد الأشخاص اللي ما يدروا انك تقدر تستخدم ChatGPT على وتساب حقك‼️🤯

‏الموضوع جدًا سهل🔥

‏بحط لكم الخطوات

‏اسم الأداة:

‏Heypat AI.

‏منها تقدر تستخدم ChatGPT مباشرة على الواتساب او التيليجرام

‏سهل وسريع وآمن‼️

‏هذا رابطها:

https://heypat.ai/

روح للواتساب وقول: "Hey Pat"

وارجع اعمل نعم YES بعد الرد 

‏أهم المزايا:

‏1. معلومات كافية تساعدك بكل وقت

‏2. بيانات محدثة

‏3. آخر الأخبار وآخر المستجدات والترند

‏ايش المميز أكثر في PAT😍؟

‏- يجيب لك المعلومات في ثواني

‏- إنشاء محتوى تفصيلي

‏- دعم تعليمي مستمر

‏- معلومات محدثة للحظة

‏- آخر التحديثات لصحتك

‏-  الترجمة بكفاءة

اشياء جديد في برمجه Dart & Flutter

كيفية إضافة قاعدة بيانات محلية باستخدام Hive في Flutter

https://onlyflutter.com/how-to-add-a-local-database-using-hive-in-flutter/

إذا كنت تريد إضافة قاعدة بيانات محلية إلى تطبيق Flutter، فإن Hive هو خيار شائع. فهو مكتوب بلغة Dart الخالصة، ولا يتطلب SQL، وهو سريع للغاية. في هذا المنشور، ستتعلم كيفية استخدام Hive في Flutter من خلال بناء تطبيق جرد.


R.I.P. build_runner: نظرة متعمقة على وحدات الماكرو في Dart & Flutter

https://quickbirdstudios.com/blog/macros-dart-flutter/

على عكس build_runner، الذي يتطلب تبعيات خارجية وقد يبدو مرهقًا، تعمل وحدات الماكرو في Dart على تمكين إنشاء التعليمات البرمجية مباشرةً في وقت التجميع، مما يلغي الحاجة إلى خطوة بناء منفصلة. في هذه المقالة، ستستكشف وحدات الماكرو وكيفية تمكينها.


الانتقال إلى Serverless مع Dart: AWS Lambda لمطوري Flutter

https://dinkomarinac.dev/going-serverless-with-dart-aws-lambda-for-flutter-devs/

هذه المقالة هي الجزء الأول من سلسلة "الانتقال إلى نظام بدون خوادم مع Dart". والهدف من هذه السلسلة هو أن نوضح لك كيفية كتابة ونشر منطق بدون خوادم (المعروف أيضًا باسم وظائف السحابة) إلى موفري السحابة الأكثر شهرة: AWS وGCP.


ما هو Dart في Flutter؟ : دليل كامل

https://flutterdesk.com/what-is-dart-in-flutter/

سيشرح هذا التقديم أساسيات Dart. كما سيوضح كيفية عمل Dart مع تطوير Flutter. دعنا نتعمق في كيفية دعم Dart لإطار عمل Flutter!


إنشاء حزمة Flutter جديدة ونشرها على pub.dev في ساعتين

https://kazlauskas.dev/blog/publishing-new-flutter-package/

دليل خطوة بخطوة حول كيفية إنشاء حزمة Flutter جديدة ونشرها على pub.dev، بسرعة وسهولة.


إطلاق العنان لأداء Flutter المحسّن؛ حالة المفاتيح

https://dev.to/dirisujesse/unlocking-improved-flutter-performance-a-case-for-keys-101j/

ستسلط هذه المقالة الضوء على أهمية المفاتيح لعناصر واجهة المستخدم الرسومية في Flutter وكيفية استخدامها لتحسين الأداء.


ما هي البرمجة وماذا يعني أن يكون الشخص مبرمجاً؟

البرمجة هي فن ومهارة إعطاء الأوامر للآلات، مثل الحواسيب، لتنفيذ مهام محددة. المبرمج هو الشخص الذي يكتب هذه الأوامر بلغة يفهمها الحاسوب. تخيل أنك تكتب وصفة طعام، ولكن بدلاً من وصف المكونات والخطوات لطاهٍ بشري، تكتبها بلغة يفهمها روبوت طاهٍ!

مثلاً، عندما تفتح موقع الويب المفضل لديك، فإن مبرمجين قد كتبوا الأوامر التي تجعل هذا الموقع يظهر على شاشتك. عندما تلعب لعبة فيديو، فإن مبرمجين قد كتبوا الأوامر التي تجعل الشخصيات تتحرك وتتفاعل مع البيئة.

حتى عندما تستخدم تطبيق الهاتف الذكي، فإن مبرمجين قد كتبوا الأوامر التي تجعل التطبيق يعمل.

لكن البرمجة ليست مجرد كتابة للأوامر, إنها ممتعة بما يأتيك من مهام لحل المشكلات. المبرمجون يقضون الكثير من الوقت في التفكير المنطقي وحل الألغاز وربط الامور العديدة مع بضعها البعض لكي ينتج عنه نتيجة واحدة.

عندما يواجهون مشكلة، يجب عليهم التفكير في كيفية تقسيمها إلى خطوات صغيرة، ثم كتابة الأوامر المناسبة لكل خطوة وهذا له اسماء جميلة في عالم البرمجة وانظمة جميلة يتم اتباعها والعمل بها, ستتعلمها عند دخولك الى هذا العالم الجميل والكبير والمليئ بالفرص.

باختصار، البرمجة هي فن تحويل الأفكار إلى واقع رقمي. المبرمجون هم السحرة الذين يجعلون الآلات تتحرك وتفكر، ويجعلون عالمنا التكنولوجي أكثر إثارة كل يوم.

جوجل كلاود تفرض المصادقة متعددة العوامل بحلول عام 2025 لجميع المستخدمين .

أعلن قسم السحابة في جوجل أنه سيفرض المصادقة الإلزامية متعددة العوامل (MFA) لجميع المستخدمين بحلول نهاية عام 2025 كجزء من جهودها لتحسين أمان الحسابات .


وقال مايانك أوبادياي، نائب رئيس الهندسة والمهندس المتميز في جوجل كلاود، في بيان: "سننفذ وزارة الخارجية الإلزامية لجوجل كلاود في نهج تدريجي سيتم طرحه على جميع المستخدمين في جميع أنحاء العالم خلال عام 2025 .


لضمان انتقال سلس، ستقدم Google Cloud إشعارا مسبقا للمؤسسات والمستخدمين على طول الطريق للمساعدة في التخطيط لعمليات نشر MFA .


من المقرر أن تتم عملية التنفيذ على ثلاث مراحل، بدءا من هذا الشهر وحتى نهاية عام 2025 


✔️ المرحلة الأولى (بدءا من نوفمبر 2024)، عندما سيتم تزويد المسؤولين بالمعلومات للتحضير للترقية الأمنية

✔️ المرحلة 2 (أوائل عام 2025)، عندما تبدأ Google في طلب MFA لجميع مستخدمي Google Cloud الجدد والحاليين الذين يقومون بتسجيل الدخول باستخدام كلمة مرور

✔️ المرحلة 3 (نهاية عام 2025)، عندما تقوم Google بتوسيع نطاق حماية MFA للمستخدمين .

 


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


يتبع الإعلان أيضا تحركات مماثلة من منافسيها السحابيين أمازون ومايكروسوفت، اللتين بدأتا أيضا في سن وزارة الخارجية الإلزامية لخدمات أمازون ويب (AWS) وأزور، على التوالي، في الأشهر الأخيرة .


https://cloud.google.com/blog/products/identity-security/mandatory-mfa-is-coming-to-google-cloud-heres-what-you-need-to-know/


إلى مصممي واجهة المستخدم وتجربة المستخدم، إليكم دليلاً سريعًا للشبكة المحمولة لشاشات iOS وAndroid.

 

او رابط الصوره من هنا :  https://sajaf-fon.blogspot.com/2024/11/ios-android-ui-ux.html/

لمعرفه شيء جديد وحصري في برمجه فلاتر

لم يتم العثور على الملف 'Flutter/Flutter.h'

https://onlyflutter.com/flutter-flutter-h-file-not-found/

عند تطوير تطبيق Flutter الخاص بك لنظام iOS، قد تواجه خطأً يشير إلى عدم العثور على ملف "Flutter/Flutter.h" . في هذا المنشور، سنستعرض الحل لمساعدتك في حل هذا الخطأ وتشغيل تطبيقك بسلاسة على نظام iOS.


لماذا تعلم SwiftUI كمطور Flutter؟

https://verygood.ventures/blog/why-learn-swiftui-as-a-flutter-developer/

هناك العديد من الحالات الهامشية التي لا يغطيها Flutter. على مدار 10 سنوات، واصلت Apple دفع iOS وiPadOS وmacOS إلى الأمام من خلال إزالة الوظائف من التطبيق الأساسي وإضافتها في مكان آخر حتى تتمكن من التفاعل معها دون تشغيل التطبيق على الإطلاق. لذلك، في هذه المقالة، ناقش فريق VGV مقارنة SwiftUI وFlutter وناقش سبب رغبتك في تعلم SwiftUI كمطور Flutter وكيف يمكن أن تبدو التجربة.


تأمين البيانات باستخدام تشفير AES وفك التشفير في Flutter

https://medium.com/@eebrahimjoy/secure-data-with-aes-encryption-decryption-in-flutter-e401a14cdab7/

في هذه المقالة، سنتناول نهجًا خطوة بخطوة لتنفيذ تشفير وفك تشفير AES (معيار التشفير المتقدم) في تطبيق Flutter باستخدام Dart.


كيفية استخدام الرسوم المتحركة Flare في Flutter لإنشاء واجهات مستخدم جذابة وجميلة

https://medium.com/stackademic/how-to-use-flare-animations-in-flutter-to-create-engaging-and-beautiful-uis-c064891b5645/

في هذه المقالة، سنتعمق في كيفية استخدام رسوم Flare المتحركة في Flutter. سواء كنت مبتدئًا أو مطورًا متقدمًا، سيوفر لك هذا الدليل خطوات عملية ومقاطع تعليمات برمجية ونصائح من خبراء لتحسين تجربة المستخدم في تطبيقك.

لعمل شخصية المستخدم (Persona) و خريطة تجربة المستخدم (User Journey Map) لخدمة توصيل الطعام، يمكنك اتباع الخطوات التالية:

1. إنشاء شخصية المستخدم (Persona):

   - الاسم: اختر اسماً مناسباً للشخصية، مثلاً "علي" أو "سارة".

   - العمر: حدد الفئة العمرية، مثلًا: 25 سنة.

   - الوظيفة: اختر وظيفة توضح مستوى الدخل وأنماط الحياة، مثل موظف بدوام كامل، أو طالب.

   - الهوايات والاهتمامات: أضف بعض الاهتمامات التي تدعم استخدامه لتطبيق توصيل الطعام.

   - الأهداف: ما الذي يأمل المستخدم في تحقيقه باستخدام التطبيق؟ مثال: توصيل سريع، توفير طعام صحي.

   - التحديات: أي صعوبات يمكن أن تواجهه؟ مثل تكلفة التوصيل العالية، أو خيارات محدودة للطعام الصحي.


2. عمل خريطة تجربة المستخدم (User Journey Map):

   - المرحلة الأولى - الوعي: كيف يتعرف المستخدم على خدمة التوصيل؟ مثلًا عبر الإعلانات أو توصيات الأصدقاء.

   - المرحلة الثانية - البحث عن خيارات: كيف يبحث عن الطعام؟ مثلاً استخدام فلتر للمطاعم حسب المسافة أو نوع الطعام.

   -  المرحلة الثالثة - الطلب: هنا سيبدأ المستخدم بإضافة الطعام إلى السلة والتأكيد.

   - المرحلة الرابعة - التوصيل: تعقب الطلب وتحديد وقت الوصول المتوقع.

   - المرحلة الخامسة - التقييم: قد يقوم بتقييم الخدمة بعد وصول الطعام.

مجاناً 8 دورات تدريبية حول أمن الحوسبة السحابية .

تعرف على كيفية بدء مهنة في مجال الحوسبة السحابية .

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


💥 المقدمة

1. الوظائف في مجال الحوسبة السحابية

Careers in Cloud Computing


2. الأمن السيبراني بإستخدام الحوسبة السحابية

Cyber Security with Cloud Computing


💥 Microsoft Azure

3. البدء في أستخدام Microsoft Azure

Getting Started with Microsoft Azure


4. التدريب الأساسي على إدارة Azure

Azure Administration Essential Training


5. إعداد شهادة أساسيات Azure (AZ-900)

Azure Fundamentals (AZ-900) Cert Prep


💥 AWS آمازون السحابية

6. AWS لغير المهندسين

AWS for Non-Engineers


7. ممارس السحابة في AWS

AWS Cloud Practitioner


8. الترحيل إلى AWS

Migrating to AWS


https://linktr.ee/mikemillercyber

لتتعلم شي جديد في برمجه فلاتر

أتمتة نشر تطبيق Flutter iOS باستخدام GitHub Actions وCodemagic CLI

https://canopas.com/automate-flutter-ios-app-deployment-with-github-actions-and-codemagic-cli-4d063ea6ef08

في هذه المقالة، ستتعلم كيفية استخدام أدوات Codemagic CLI مع GitHub Actions لنشر تطبيق Flutter على iOS.


الحفاظ على مزامنة الأدوات مع بياناتك

https://blog.burkharts.net/keeping-widgets-in-sync-with-your-data/

هذه المقالة هي الجزء الثاني من استخدام كائنات الوكيل. في هذه المقالة، ستتعلم كيفية تحسين معالجة الأخطاء، وكيفية عرض كائن وكيل في أماكن متعددة في وقت واحد، وكيفية استخدام الأوامر لكتابة كود أنيق.


دعونا نتحدث عن تسربات الذاكرة في Dart و Flutter

https://dcm.dev/blog/2024/10/21/lets-talk-about-memory-leaks-in-dart-and-flutter/

في هذه المقالة، سوف نستكشف تسريبات الذاكرة في Dart و Flutter، وكيف تحدث، وأهميتها في ممارسات الترميز، والحلول لتصحيح تسريبات الذاكرة وتحديدها مثل DevTools و Leak Tracker والتحول إلى اليسار بالاعتماد على أدوات التحليل الثابتة مثل DCM وكيف يمكنها منع مثل هذه التسريبات من التسلل إلى قاعدة التعليمات البرمجية الخاصة بك.


كيفية إدارة رؤوس HTTP ومعلمات الاستعلام في Flutter

https://medium.com/@blup-tool/how-to-manage-http-headers-and-query-parameters-in-flutter-2a2381b3285f/

تعرف على كيفية إضافة رؤوس مخصصة ومعلمات استعلام إلى طلبات HTTP في Flutter. أتقن تفاصيل تكامل واجهة برمجة التطبيقات والاتصال.

أدوات للكشف عن بياناتك الشخصية على الويب المظلم DarkWeb

فيما يلي تجميع لأفضل 4 أدوات مجانية قم بإستخدامها بإنتظام (كل 4 أشهر) للتحقق مما يعرفه المتسللون عنك بالفعل .


1. Pentester


🔗 رابط : https://pentester.com/

اكتشف بصمتك الرقمية بنقرتين بسيطتين .

أداة رائعة حقًا لمعرفة ما إذا كانت بياناتك قد تعرضت للتسريب حتى تتمكن من تغيير كلمات المرور الخاصة بك بسرعة وعدم ترك أي فرصة للمتسللين .


2. HackCheck


🔗 الرابط : https://hackcheck.io


باختصار HackCheck هو محرك بحث عن تسريبات البيانات .

يسمح للمستخدمين بالتحقق مما إذا كانت بياناتهم الشخصية أو التجارية قد تعرضت للاختراق والحصول على رؤى وخطوات لمنع الهجمات المستقبلية .


3. Have I been PWNED?


🔗 الرابط : http://haveibeenpwned.com/


واحدة من أقدم الأدوات للتحقق مما إذا كانت بياناتك الشخصية قد تعرضت للاختراق والتسريب إلى الويب المظلم .


يحتوي هذا الموقع أيضًا على قسم ضخم يحتوي على أكبر وأحدث خروقات البيانات.


وُلدت Have I Been Pwned في أعقاب إحدى أكبر عمليات الاختراق لحسابات العملاء في التاريخ - اختراق Adobe .

في عام 2013، تم اختراق حوالي 153 مليون حساب Adobe، ويحتوي كل منها على:

•معرف داخلي

•اسم المستخدم

•بريد إلكتروني

•كلمة المرور المشفرة وما إلى ذلك .


4. NameScan.io

🔗 الرابط : http://namescan.io


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


قم بتحليل مدى أمان ملفك الشخصي على مواقع الويب التي شاركت بريدك الإلكتروني فيها .


💡دورات وشهادات مجانية اختبار الاختراق والقرصنة الأخلاقية مع اعتماد CPD

- مهندس اختبار الاختراق

Penetration Testing Engineer


https://alison.com/course/penetration-testing-engineer/


- تقييم نقاط الضعف واختبار الاختراق (VAPT)

Vulnerability Assessment and Penetration Testing (VAPT)


https://alison.com/course/vulnerability-assessment-and-penetration-testing-vapt/


- ChatGPT (Open AI) الأمن والخصوصية والقرصنة الأخلاقية

ChatGPT (Open AI) Security, Privacy & Ethical Hacking


https://alison.com/course/chatgpt-open-ai-security-privacy-and-ethical-hacking/


- القرصنة الأخلاقية

Professional Ethical Hacking


https://alison.com/course/professional-ethical-hacking/


- مستشار اختبار الاختراق

Penetration Testing Consultant


https://alison.com/course/penetration-testing-consultant/

كيفية إضافة الظلال إلى عناصر واجهة المستخدم في Flutter

في Flutter، هناك العديد من الطرق لإضافة الظلال إلى عناصر واجهة المستخدم الخاصة بك. في هذا المنشور، سنتناول الطرق الشائعة لإضافة الظلال إلى عناصر واجهة المستخدم داخل تطبيقك. وسنلقي نظرة فاحصة أيضًا على الخصائص التي تتحكم في كيفية ظهور الظلال حتى تتمكن من إنشاء تأثير الظل المثالي.

جدول المحتويات

إضافة الظلال إلى الحاوية

  • استخدم فئة BoxDecoration لإضافة الظلال إلى عناصر واجهة المستخدم في Flutter
  • استكشاف فئة BoxShadow

1. BlurRadius

2. أسلوب التمويه

3. اللون

4. الإزاحة

5. انتشار نصف القطر

  • استخدام عناصر واجهة المستخدم المتعددة BoxShadow لإضافة الظلال في Flutter
  • إضافة الظلال إلى الأدوات الأخرى
  • تغليف عناصر واجهة المستخدم باستخدام حاوية لإضافة الظلال في Flutter
  • خاتمة

إضافة الظلال إلى الحاوية
سنبدأ بإضافة ظل إلى إحدى الأدوات الأكثر استخدامًا في Flutter: Containerالأداة. أولاً، قمنا بإعداد تطبيق بسيط داخل ملفنا main.dartيعرض Containerأداة مركزية بلون خلفية أزرق.

CMD...

import 'package:flutter/material.dart';

void main() => runApp(const MyApp());

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        body: Center(
          child: Container(
            width: 200,
            height: 200,
            color: Colors.blue,
            child: const SizedBox.shrink(),
          ),
        ),
      ),
    );
  }
}
CMD.....

عندما نقوم بتشغيل main.dartالملف، سوف ترى لونًا أزرقًا Containerمعروضًا في وسط الشاشة.

الآن دعونا ننتقل إلى القسم التالي حيث سنقوم بتطبيق الظلال على Containerالأداة.

استخدم فئة BoxDecoration لإضافة الظلال إلى عناصر واجهة المستخدم في Flutter
Containerيمكن إضافة الظلال إلى عنصر واجهة مستخدم في Flutter باستخدام BoxDecorationالفئة. تتيح لك هذه الفئة تخصيص Containerمظهر عنصر واجهة المستخدم، بما في ذلك الظلال.



CMD...

import 'package:flutter/material.dart';

void main() => runApp(const MyApp());

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        body: Center(
          child: Container(
            width: 200,
            height: 200,
            decoration: const BoxDecoration(
              color: Colors.white,
              boxShadow: [
                BoxShadow(
                  blurRadius: 25,
                  blurStyle: BlurStyle.normal,
                  color: Colors.black,
                  offset: Offset.zero,
                  spreadRadius: 2,
                ),
              ],
            ),
          ),
        ),
      ),
    );
  }
}

CMD.....

في الكود أعلاه، استبدلنا colorخاصية the Containerبالخاصية decoration. داخل decorationالخاصية، نستخدم BoxDecorationمثيلًا. BoxDecorationيسمح لنا المثيل بتعيين لون الخلفية وإضافة تأثير ظل إلى Container.

داخل BoxDecorationالمثيل، قمنا بتعيين colorsالخاصية إلى Colors.white، والخاصية boxShadowإلى قائمة تحتوي على BoxShadowمثيل واحد لإضافة ظل. BoxShadowيأخذ المثيل الخصائص التالية:

  • blurRadius:يحدد عدم وضوح الظل. تؤدي القيمة الأعلى إلى إنشاء ظل أكثر نعومة.
  • blurStyle:يحدد نمط التمويه المطبق على الظل. في هذه الحالة، يتم ضبطه على تمويه عادي.
  • color:تعيين لون الظل إلى اللون المحدد، والذي في هذا المثال تم تعيينه إلى اللون الأسود.
  • offset:يحدد موضع الظل. هنا، Offset.zeroيعني أن الظل يقع مباشرة أسفله Containerدون أي إزاحة في أي اتجاه.
  • spreadRadius:يتحكم في مدى انتشار الظل من حواف Container.
عندما نقوم بتشغيل التطبيق، سوف ترى لونًا أبيض Containerمع ظل داكن حوله.
في القسم القادم من هذه التدوينة، سنلقي نظرة عن كثب على كل خاصية من خصائص BoxShadowالفئة.

استكشاف فئة BoxShadow
لقد تعلمنا حتى الآن أن هذه BoxShadowالفئة تسمح لنا بإنشاء تأثيرات ظلية Containerللأدوات. BoxShadowوتوفر هذه الفئة الكثير من التخصيصات. دعنا نستعرض خيارات التخصيص لنرى ما يمكننا تحقيقه باستخدامها.

1. BlurRadius
تتحكم الخاصية blurRadiusفي مدى ضبابية الظل. تؤدي القيمة الأكبر، مثل 100، إلى إنشاء ظل أكثر نعومة ووضوحًا. وعلى العكس من ذلك، يؤدي تعيين blurRadiusإلى إلى إلى 0إنشاء ظل ذو حواف حادة.

CMD...

BoxShadow(
  blurRadius: 100,
  blurStyle: BlurStyle.normal,
  color: Colors.black,
  offset: Offset.zero,
  spreadRadius: 2,
),

CMD.....
في هذا المثال، قمنا بتعيين الخيار blurRadiusإلى 100لجعل الظل ناعمًا للغاية وأكثر انتشارًا.

2. أسلوب التمويه
تعرف الخاصية blurStyleالموجودة في BoxShadowالفصل على نمط التمويه المطبق على الظل.
CMD...

BoxShadow(
  blurRadius: 100,
  blurStyle: BlurStyle.solid,
  color: Colors.black,
  offset: Offset.zero,
  spreadRadius: 2,
),

CMD.....
في الكود أعلاه، نستخدم BlurStyle.solid، والذي ينشئ ظلًا صلبًا وحاد الحواف.
3. اللون
تسمح لنا الخاصية colorالموجودة في BoxShadowالفصل بتحديد لون الظل.

CMD...

BoxShadow(
  blurRadius: 100,
  blurStyle: BlurStyle.solid,
  color: Colors.blue,
  offset: Offset.zero,
  spreadRadius: 2,
),

CMD.....

في هذا الكود، قمنا بتغيير colorإلى Colors.blue، مما سيؤدي إلى تحويل الظل إلى اللون الأزرق. يمكنك استخدام أي لون تريده، أو حتى التدرجات اللونية للحصول على تأثيرات أكثر إبداعًا.

4. الإزاحة
تحدد الخاصية offsetالموجودة في BoxShadowالفصل موضع الظل بالنسبة للأداة.
CMD...

BoxShadow(
  blurRadius: 100,
  blurStyle: BlurStyle.solid,
  color: Colors.blue,
  offset: Offset(25, 25),
  spreadRadius: 2,
),

CMD.....
في هذه الحالة، قمنا بتعيين القيمة offsetإلى Offset(25, 25)، وهذا من شأنه تحريك وحدات بكسل الظل 25إلى اليمين ووحدات 25بكسل أسفل الأداة. وهذا من شأنه أن يخلق تأثير ظل يعطي انطباعًا بأن الضوء قادم من الاتجاه العلوي الأيسر.
يمكننا أيضًا استخدام القيم السلبية لتحريك الظل في الاتجاه المعاكس.
CMD...

BoxShadow(
  blurRadius: 100,
  blurStyle: BlurStyle.solid,
  color: Colors.blue,
  offset: Offset(-25, -25),
  spreadRadius: 2,
),

CMD.....
في الوقت الحالي، قمنا بتغيير offsetإلى Offset(-25, -25)، وهذا من شأنه أن يحرك وحدات بكسل الظل 25إلى اليسار 25والبكسلات الموجودة أعلى الأداة. ويعطي هذا التغيير انطباعًا بأن الضوء قادم من الاتجاه السفلي الأيمن.

5. انتشار نصف القطر
تحدد الخاصية spreadRadiusالموجودة في BoxShadowالفصل مدى انتشار الظل من حدود الأداة.


CMD...

BoxShadow(
  blurRadius: 100,
  blurStyle: BlurStyle.solid,
  color: Colors.blue,
  offset: Offset.zero,
  spreadRadius: 50,
),

CMD.....

في هذا المثال، قمنا بتعيين spreadRadiusإلى 50، مما يعني أن الظل سيمتد 50بكسلًا من حواف الأداة.

استخدام عناصر واجهة المستخدم المتعددة BoxShadow لإضافة الظلال في Flutter
ربما لاحظت أن boxShadowخاصية الفصل BoxDecorationتأخذ قائمة من BoxShadowالحالات. وهذا يعني أنه يمكنك تطبيق ظلال متعددة.

CMD...

Container(
  width: 200,
  height: 200,
  decoration: BoxDecoration(
    color: Colors.white,
    borderRadius: BorderRadius.circular(8),
    boxShadow: [
      BoxShadow(
        blurRadius: 5,
        color: Colors.blue.withOpacity(0.8),
        offset: const Offset(5, 5),
        spreadRadius: 5,
      ),
      BoxShadow(
        blurRadius: 5,
        color: Colors.green.withOpacity(0.8),
        offset: const Offset(-5, -5),
        spreadRadius: 5,
      ),
    ],
  ),
),

CMD.....

في مقتطف التعليمات البرمجية هذا، أضفنا مثيلين BoxShadowداخل boxShadowالخاصية. كل مثيل له لون مختلف، وواحد له إزاحة موجبة بينما الآخر له إزاحة سالبة. يؤدي هذا إلى إنشاء ظل حول Containerالأداة بألوان متعددة.
إضافة الظلال إلى الأدوات الأخرى
حتى الآن، نقوم بإنشاء ظلال باستخدام Containerالأداة مع BoxDecorationالفصل. تحتوي بعض الأدوات أيضًا على ظلال افتراضيًا ويمكن تعديلها بسهولة باستخدام الخصائص. خذ Cardالأداة كمثال.
CMD...

import 'package:flutter/material.dart';

void main() => runApp(const MyApp());

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  @override
  Widget build(BuildContext context) {
    return const MaterialApp(
      home: Scaffold(
        body: Center(
          child: Card(
            color: Colors.blue,
            elevation: 20,
            shadowColor: Colors.black,
            child: SizedBox(
              width: 200,
              height: 200,
            ),
          ),
        ),
      ),
    );
  }
}

CMD.....
في هذا الكود، نستخدم Cardعنصر واجهة المستخدم ذي الخلفية الزرقاء. ونضبط elevationto 20لجعل الظل أكثر بروزًا، و shadowColorto Colors.blackلجعل الظل داكنًا.
كما ترى، فإن تغيير الظل على Cardالأداة بسيط! ومع ذلك، BoxShadowفإن الطريقة أكثر مرونة. لحسن الحظ، في معظم الحالات، يمكنك تغليف أدواتك باستخدام Containerأداة، وسنتناول المزيد حول هذا في القسم التالي.

تغليف عناصر واجهة المستخدم باستخدام حاوية لإضافة الظلال في Flutter
في الحالات التي لا تكون فيها الظلال المحددة مسبقًا كافية، يمكنك تغليف الأداة باستخدام Containerأداة وتطبيق ظل مخصص BoxDecoration، كما تمت مناقشته سابقًا.

CMD...

import 'package:flutter/material.dart';

void main() => runApp(const MyApp());

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        body: Center(
          child: Container(
            decoration: BoxDecoration(
              boxShadow: [
                BoxShadow(
                  blurRadius: 25,
                  blurStyle: BlurStyle.normal,
                  color: Colors.grey.withOpacity(0.5),
                  offset: Offset.zero,
                  spreadRadius: 25,
                ),
              ],
            ),
            child: const Card(
              color: Colors.blue,
              child: SizedBox(
                width: 200,
                height: 200,
              ),
            ),
          ),
        ),
      ),
    );
  }
}

CMD.....
في مقتطف التعليمات البرمجية هذا، قمنا بتغليف Cardالأداة باستخدام Containerأداة. ومن خلال القيام بذلك، يمكننا تطبيق تأثير ظل مخصص على البطاقة باستخدام BoxShadowالفئة. هنا، قمنا بإنشاء ظل مع a blurRadiusof 25وa blurStyleof BlurStyle.normalوa colorof grey مع تعتيم 0.5وan offsetof Offset.zeroوa spreadRadiusof 25.

لقد قمنا أيضًا بإزالة الخاصيتين elevationand shadowColorمن Cardالأداة للتأكد من أن الظل المخصص وظل البطاقة الافتراضي لا يتداخلان مع بعضهما البعض.

خاتمة
عندما يتعلق الأمر بـ Flutter، فهناك العديد من الطرق لإضافة الظلال إلى عناصر واجهة المستخدم الخاصة بك. يمكنك دائمًا استخدام Containerعنصر واجهة المستخدم مع BoxDecorationالفئة. تحتوي بعض عناصر واجهة المستخدم أيضًا على ظلال محددة مسبقًا يمكن تغييرها باستخدام الخصائص.

قم بإنشاء أيقونات الوسائط الاجتماعية هذه باستخدام HTML وCSS فقط 🔥

الكود https://github.com/atherosai/ui/tree/main/socials-05/ 🧑‍💻



الصين تخطو خطوة مبهرة نحو مستقبل الفضاء🚀 دمج الذكاء الاصطناعي مع تكنولوجيا الأقمار الصناعية يمثل نقلة نوعية في مسيرة الصين 🇨🇳 مع تكنولوجيا الفضاء

الصين  تبدأ فصلاً جديدًا من فصول عالم الفضاء. حيث  أطلقت جامعة هونغ كونغ الصينية CUHK قمرا صناعيا ضخما مزودا بقدرات ذكاء اصطناعي متقدمة لمراقبة الأرض. 


ويمثل هذا الإطلاق خطوة حاسمة في استراتيجية الصين الأوسع لدمج الذكاء الاصطناعي  مع تكنولوجيا الفضاء ويضع هونغ كونغ كلاعب رئيسي في هذه التطورات.

ويتميز القمر الصناعي بكاميرا استشعار عن بعد عالية الدقة بدقة أقل من متر ومعالجة بيانات ذكية في المدار، مما يتيح الحصول على رؤى في الوقت الفعلي والاستجابة السريعة للكوارث الطبيعية أو التغيرات البيئية. 


وشركة ADA Space، التي تقف وراء تصنيع هذا الابتكار، هي مؤسسة رئيسية تدعمها حكومة هونغ كونغ وقد شاركت في العديد من المشاريع ذات الأولوية الوطنية، بما في ذلك برنامج استكشاف القمر في الصين.


وتقول الجامعة:

https://focus.cuhk.edu.hk/en/20241009/debut-satellite-begins-new-chapter-of-hong-kong-aerospace/050-science-engineering-technology-en/


انه إنجاز جامعة هونغ كونغ للعلوم والتكنولوجيا في الوقت المناسب للاحتفال بالذكرى 75 لتأسيس جمهورية الصين الشعبية.


وان القمر الصناعي  "Hong Kong Youth Scientific Innovation"، طورته جامعة هونغ كونغ للعلوم والتكنولوجيا بالتعاون مع ADA Space، و تم إطلاقه  إلى الفضاء في ميناء هايانج أورينتال الفضائي في مقاطعة شاندونغ باستخدام مركبة الإطلاق Smart Dragon 3.


و سيجمع البيانات البيئية والجغرافية في هونغ كونغ ومنطقة خليج قوانغدونغ-هونغ كونغ-ماكاو الكبرى لإعلام الاستجابات للكوارث الطبيعية العالمية وبناء المدن الذكية. 


ويمثل الإطلاق ميلاد أول قمر صناعي تم تطويره بواسطة مؤسسة تعليمية عليا في هونغ كونغ، ومعلمًا مهمًا في أبحاث الفضاء في جامعة هونغ كونغ للعلوم والتكنولوجيا. 


والقمر الصناعي هو أول قمر صناعي لمراقبة الأرض في هونغ كونغ بدعم من صندوق الابتكار والتكنولوجيا التابع لحكومة هونغ كونغ. تشارك جامعة هونغ كونغ بشكل مباشر في تصميمه وبحثه وتطويره واستقبال البيانات. وسيتم استخدام البيانات البيئية والجغرافية التي تم جمعها للمساعدة في إحراز تقدم في التخفيف من الكوارث العالمية والمدن الذكية والحياد الكربوني والاقتصاد المنخفض الارتفاع. 


وفي مؤتمر صحفي، قالت الأستاذة كوان مي بو، أستاذة الجغرافيا وإدارة الموارد (GRM) ومديرة معهد ISEIS:

 إن هذا الاختراق من شأنه أن يمكّن من جمع البيانات بشكل أكثر مباشرة ومنهجية للتنبؤ بالكوارث والاستجابة لها. وأضافت أن النتائج ستنطبق أيضًا على تصميم وتطوير المدن الذكية. 


وقال الأستاذ كوان، الذي يشغل منصب كبير العلماء في مجموعة أقمار CUHK الصناعية: 

"تتمتع CUHK بخبرة لسنوات عديدة في مجال أبحاث الأقمار الصناعية وتحليل البيانات. بالإضافة إلى الحصول على الدعم القوي من البر الرئيسي، فإننا مرتبطون ارتباطًا وثيقًا بالعالم من خلال مساعدة البلدان في منطقة آسيا والمحيط الهادئ في الوقاية من الكوارث". 


وقال الأستاذ ما بيفينج، كبير مهندسي مشروع القمر الصناعي في CUHK ونائب رئيس قسم GRM:

 "إن قمر جامعة هونغ كونغ الصناعي سيمكن فريقنا من تطوير أساليب جديدة تعتمد على البيانات مع زيادة دقة التنبؤ بنسبة تصل إلى 85٪".