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

أسرار الـ Custom Paint في Flutter: ارسم كل اللي تتخيله بإيدك

أسرار الـ Custom Paint في Flutter: ارسم كل اللي تتخيله بإيدك أكيد مريت باللحظة دي في شغلك بـ Flutter: بيجيلك تصميم من الـ Designer فيه شكل هندسي معقد، أو انيميش

أسرار الـ Custom Paint في Flutter: ارسم كل اللي تتخيله بإيدك
Reading Count: 5

أسرار الـ Custom Paint في Flutter: ارسم كل اللي تتخيله بإيدك

أكيد مريت باللحظة دي في شغلك بـ Flutter: بيجيلك تصميم من الـ Designer فيه شكل هندسي معقد، أو انيميشن (Animation) مخصص، أو رسم بياني (Graph) مش موجود في الـ Widgets الجاهزة. بتقعد تدور في الـ Pub.dev ساعات وفي الآخر مفيش حاجة بتركب على دماغك، أو بتلاقي مكتبة تقيلة بتبوظ الأداء. هنا بيجي دور الـ Custom Paint، الأداة اللي بتخليك ترسم حرفياً أي حاجة على الشاشة باستخدام الـ Canvas.

يعني إيه Custom Paint وليه محتاجه؟

الـ Custom Paint مش مجرد Widget عادية، ده كلاس بيسمحلك تتحكم في كل بكسل (Pixel) في المساحة المخصصة ليك. بدل ما تعتمد على الـ Containers والـ Rows والـ Columns، إنت هنا بتتعامل مع لغة الرسم المباشر (Low-level rendering). الـ Canvas هو اللوحة البيضاء، والـ Painter هو الفرشاة بتاعتك.

الأدوات الأساسية اللي لازم تعرفها

عشان تبدأ ترسم، لازم تفهم 3 حاجات أساسية:

  • الـ CustomPainter: ده الكلاس اللي بتورث منه عشان تكتب منطق الرسم بتاعك.
  • الـ Canvas: اللوحة اللي بترسم عليها، وفيها ميثودز زي drawLine و drawRect و drawPath.
  • الـ Paint: ده "صندوق الألوان" بتاعك، اللي بتحدد فيه لون الخط، السمك (Stroke width)، هل الشكل مليان (Fill) ولا مفرغ، وهكذا.

ازاي ترسم أول Path خاص بيك؟

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


class MyPainter extends CustomPainter {
  @override
  void paint(Canvas canvas, Size size) {
    final paint = Paint()
      ..color = Colors.blue
      ..strokeWidth = 5
      ..style = PaintingStyle.stroke;

    final path = Path();
    path.moveTo(size.width / 2, 0);
    path.lineTo(size.width, size.height);
    path.lineTo(0, size.height);
    path.close();

    canvas.drawPath(path, paint);
  }

  @override
  bool shouldRepaint(covariant CustomPainter oldDelegate) => false;
}

الاحتراف في الـ Custom Paint

السر الحقيقي مش في الرسم الثابت، السر في الربط بين الـ AnimationController والـ CustomPainter. لما بتعمل انيميشن، الـ Flutter بيعمل Re-build للـ Widget، فبالتالي الـ paint ميثود بتستدعي تاني وبترسم الشكل في وضع جديد، وده اللي بيخليك تعمل رسومات بيانية بتتحرك أو تأثيرات بصرية (Visual Effects) مذهلة.

نصيحة من أخ لمبرمج

الـ Custom Paint قوة كبيرة، بس زي ما بيقولوا "القوة الكبيرة بتجيب مسؤولية كبيرة". بلاش تبالغ في استخدامه في حاجات ممكن الـ Widgets العادية تعملها، لأن الـ Layout العادية بتتعمل لها Optimizations من الـ Flutter Engine. استخدم الـ Custom Paint لما يكون فعلاً ده الحل الوحيد أو الأمثل للأداء. اتعلم الرياضيات البسيطة (Trigonometry) هتحتاجها كتير لو عايز ترسم منحنيات (Curves) أو رسومات دائرية.

ابدأ بمشروع صغير، ارسم ساعة تناظرية، أو شريط تقدم (Progress Bar) بشكل مختلف، هتلاقي نفسك دخلت عالم تاني من الإبداع في البرمجة.


Share

Related posts

May 23, 2025 • 1 min read
Reading Count: 670
FlyEnv - أداة إدارة بيئة تطوير متكاملة للمطورين

FlyEnv هي أداة شاملة لإدارة بيئات التطوير، بتسهل على المطورين التعامل مع إصدارات متعددة من لغات البر...

Apr 28, 2025 • 1 min read
Reading Count: 706
فهم نمط الـ Repository في Laravel: دليل شامل

تعلم كل ما تحتاج معرفته عن نمط الـ Repository في Laravel. هذا الدليل يشرح كيفية تنفيذه بفعالية، مميز...

Mar 28, 2025 • 1 min read
Reading Count: 694
اجعل Laravel يقوم بـ Git Pull تلقائيًا بعد كل Push في GitHub باستخدام Webhook – بدون تدخل يدوي! 🚀

هل تعبت من الدخول إلى السيرفر كل مرة لتحديث الكود بعد git push؟ 🤦‍♂️ في هذا المقال، ستتعلم كيف تجعل...