I'm always excited to take on new projects and collaborate with innovative minds.

Phone

+20 115 052 9992

Website

https://ibrahimahmed.online/

Social Links

عنوان تلقائي

يا هلا بيك يا بشمهندس في عالم تطوير الديسكتوب! أكيد, زي أي مطور فلاتر شاطر, عملت تطبيقات موبايل جامدة جداً بـ فلاتر (Flutter) لأندرويد وآي أو إس. بس في لحظة معي

عنوان تلقائي
Reading Count: 4

يا هلا بيك يا بشمهندس في عالم تطوير الديسكتوب! أكيد, زي أي مطور فلاتر شاطر, عملت تطبيقات موبايل جامدة جداً بـ فلاتر (Flutter) لأندرويد وآي أو إس. بس في لحظة معينة, جالك عميل أو فكرت مع نفسك: "هو أنا ينفع أخد نفس الكود ده وأشغله على ويندوز (Windows) وماك (macOS)؟" والإجابة السريعة: أه وبكل سهولة!

لكن, هنا بتبدأ المشكلة الحقيقية أو "الوَجع" زي ما بنسميه. التطبيق اللي شكله فلة على شاشة الموبايل الـ Portrait, لما تفتحه على شاشة كمبيوتر 24 بوصة بتلاقيه شكله غريب جداً, النوافذ مش مظبوطة, الماوس والكيبورد مش متفاعلين صح, والدنيا تحسها "موبايل كبير" مش تطبيق ديسكتوب حقيقي (Desktop Application). في المقال ده, هعرفك خطوة بخطوة إزاي تحول تطبيق فلاتر الخاص بك ليدعم أجهزة سطح المكتب باحترافية كاملة وتخلي المستخدم يحس إنه قدام برنامج ديسكتوب أصلي.

الخطوة الأولى: تهيئة وإعداد بيئة العمل لتطبيقات سطح المكتب (Desktop Development)

قبل ما ندخل في الكود, لازم نتأكد إن جهازك جاهز لبناء تطبيقات الديسكتوب. فلاتر بيدعم ده بشكل ممتاز جداً. عشان تفعل دعم الديسكتوب لمشروعك الحالي, هتقف في التيرمينال (Terminal) وتكتب الأوامر دي حسب النظام اللي شغال عليه:

flutter config --enable-windows-desktop
flutter config --enable-macos-desktop
flutter config --enable-linux-desktop

بعد الأوامر دي, لو دخلت جوه فولدر مشروعك هتلاقي فولدرات جديدة ظهرت زي windows و macos. الفولدرات دي فيها ملفات الإعدادات الأصلية (Native Code) الخاصة بكل نظام تشغيل, ودي اللي هتقدر من خلالها تتحكم في حجم النافذة الافتراضي وأيقونة البرنامج.

التحكم في إعدادات النافذة الافتراضية (Window Management)

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

أول حاجة, بتضيف الحزمة في ملف pubspec.yaml وبعدين بتعمل تهيئة للنافذة جوه دالة main قبل ما تعمل runApp بالشكل ده:

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

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await windowManager.ensureInitialized();

  WindowOptions windowOptions = WindowOptions(
    size: Size(1024, 768),
    center: true,
    backgroundColor: Colors.transparent,
    skipTaskbar: false,
    titleBarStyle: TitleBarStyle.normal,
  );
  
  windowManager.waitUntilReadyToShow(windowOptions, () async {
    await windowManager.show();
    await windowManager.focus();
  });

  runApp(MyApp());
}

الكود ده بيضمن إن تطبيقك هيفتح بحجم محترم (1024x768) وفي نص الشاشة بالضبط, وده بيدي انطباع احترافي جداً للمستخدم أول ما البرنامج يشتغل.

التفاعل مع الكيبورد واختصارات لوحة المفاتيح (Keyboard Shortcuts)

مستخدم الديسكتوب مدمن اختصارات! ما بيحبش يرفع إيده عن الكيبورد عشان يضغط بالماوس كل شوية. عشان تعمل اختصارات كيبورد (Keyboard Shortcuts) في فلاتر وتدعم أجهزة سطح المكتب بشكل احترافي, فلاتر بيوفر لنا ودجات جاهزة زي Shortcut و Actions وكمان ودجت CallbackShortcuts.

تعال نشوف مثال عملي لإزاي نضيف اختصار زي (Ctrl + S أو Cmd + S) لحفظ البيانات:

CallbackShortcuts(
  bindings: {
    SingleActivator(LogicalKeyboardKey.keyS, control: true): () {
      // هنا بتكتب كود الحفظ بتاعك
      print("تم حفظ البيانات بنجاح!");
    },
  },
  child: Focus(
    autofocus: true,
    child: Scaffold(
      appBar: AppBar(title: Text('تطبيق الديسكتوب الاحترافي')),
      body: Center(child: Text('اضغط Ctrl + S للتجربة')),
    ),
  ),
);

بالطريقة دي, بتقدر تضيف كل الاختصارات اللي المستخدم محتاجها زي حفظ الملفات, فتح نافذة جديدة, أو حتى التنقل بين الصفحات.

التعامل مع الشاشات المتغيرة والتصميم المتجاوب (Responsive Design)

أكبر غلطة بيقع فيها المبرمج وهو بيحول تطبيق الموبايل لـ ديسكتوب, إنه بيسيب التصميم مفرود على شاشة عرضها 1920 بكسل! الشكل بيكون سيء جداً وصعب الاستخدام.

عشان تحل المشكلة دي, لازم تستخدم أدوات زي LayoutBuilder و MediaQuery عشان تفصل بين تصميم الموبايل وتصميم الديسكتوب. وكمان لازم تستخدم Responsive Frameworks أو تقسم الشاشة لأجزاء (Master-Detail Layout) زي ما بنشوف في برامج الويندوز والماك العادية.

مثال سريع لإزاي تعرض محتوى مختلف حسب حجم الشاشة:

Widget build(BuildContext context) {
  return LayoutBuilder(
    builder: (context, constraints) {
      if (constraints.maxWidth > 800) {
        // تصميم الديسكتوب (شاشة عريضة)
        return Row(
          children: [
            Expanded(flex: 1, child: SideMenu()),
            Expanded(flex: 3, child: MainContent()),
          ],
        );
      } else {
        // تصميم الموبايل أو الشاشات الصغيرة
        return MainContent();
      }
    },
  );
}

خاتمة ونصيحة من أخ

تحويل تطبيق فلاتر الخاص بك ليدعم الديسكتوب (Windows و macOS) مش مجرد خطوة تقنية إضافية تتباهى بيها, دي طريقة عبقرية تضاعف بيها جمهور تطبيقك وتفتح لنفسك أسواق جديدة وفرص عمل ضخمة جداً لم تكن متوفرة على الموبايل بس. النصيحة اللي أقدر أقدمهالك كأخ: ماتستعجلش وتعمل كل حاجة مرة واحدة; ابدأ بضبط النافذة (Window Management), وبعدين ركز على اختصارات الكيبورد, وأخيراً ظبط واجهات المستخدم (UI/UX) لتكون ملائمة للماوس والشاشات الكبيرة. جرب بايدك دلوقتي, وعيش متعة البرمجة الحقيقية!


Share

Related posts

Aug 04, 2026 • 1 min read
Reading Count: 2
تصميم أنيميشن 3D بسيط داخل Flutter بدون استخدام محركات ألعاب

أهلاً بيك يا صديقي المبرمج في مقال جديد من سلسلة شروحات فلاتر (Flutter Tutorials) الممتعة. لو انت شغ...

Aug 03, 2026 • 1 min read
Reading Count: 6
ازاي تحل مشكلة تهنيج تطبيق فلاتر (Flutter App Freezing) وتخلي الأداء صاروخ باستخدام Isolate Spawn

فئات المقال: Tutorials, Coding Challenges ازاي تحل مشكلة تهنيج تطبيق فلاتر (Flutter App Freezing) وت...

Aug 03, 2026 • 1 min read
Reading Count: 4
عنوان تلقائي

يا هلا بيك يا بشمهندس! لو بتطور تطبيق موبايل بـ فلاتر (Flutter)، أكيد في لحظة معينة جالِك أكلينت أو...