تكرار السؤال: …
الإجابة المختصرة
تنشئ RepaintBoundary طبقة عرض منفصلة (Render Layer) في الـ Render Tree، مما يمنع انتقال إشارة الرسم غير الصالح (Paint Dirty Flag) إلى الـ Parent وباقي عناصر الشاشة.
الشرح
افتراضياً في شجرة الرندر، عندما يطلب RenderObject إعادة الرسم عبر markNeedsPaint()، يصعد الطلب إلى أقرب سلف يمتلك Repaint Boundary ليعاد رسم كامل تلك الشجرة الفرعية. بعض الويدجتس تضيف حدوداً تلقائياً (مثل كل Route وعناصر القوائم داخل ListView)، لكن بدون حد قريب من العنصر المتحرك سيُعاد تسجيل أوامر الرسم لكل ما يشاركه نفس الطبقة مع كل فريم. تغليف العنصر المتحرك بـ RepaintBoundary يعزله في Layer مستقلة، فتُعاد مرحلة الـ paint (تسجيل أوامر الرسم) لهذا الجزء فقط، بينما تُعاد استخدام الطبقات المسجلة للخلفية والقوائم المحيطة كما هي عند تركيب المشهد.
مثال بالكود
// عزل العداد أو المؤشر المتحرك عن بقية الصفحة المعقدة:
RepaintBoundary(
child: ComplexAnimatedIndicator(value: animation.value),
)أخطاء شائعة
- الإفراط في استخدام RepaintBoundary على عناصر بسيطة جداً، حيث يستهلك إنشاء الطبقات المستقلة ذاكرة إضافية وقد يضر الأداء إن استُخدم بلا حاجة.