تكرار السؤال: …
الإجابة المختصرة
الـ Implicit Animations تدير الـ Controller تلقائياً بمجرد تغيير قيمة الـ Property (مثل AnimatedContainer)، بينما الـ Explicit تمنحك تحكماً كاملاً عبر AnimationController لبدء الحركة، إيقافها، عكسها، أو تكرارها.
الشرح
تعتمد الـ Implicit Animations على ويدجتس جاهزة ترث من ImplicitlyAnimatedWidget، حيث تتولى إدارة مدة الحركة (Duration) والمنحنى (Curve) داخلياً بمجرد عمل rebuild بقيمة جديدة. أما الـ Explicit Animations فتتطلب TickerProviderStateMixin وإدارة يدوية لدورة حياة الـ AnimationController، وتُستخدم عند الحاجة لحركات معقدة، متزامنة، متكررة بلا نهاية (Looping)، أو مقيدة بإيماءات سحب المستخدم (Gesture-driven).
مثال بالكود
// مثال Implicit Animation:
AnimatedContainer(
duration: const Duration(milliseconds: 300),
curve: Curves.easeInOut,
width: isExpanded ? 200.0 : 100.0,
height: 50.0,
color: isExpanded ? Colors.blue : Colors.grey,
)أخطاء شائعة
- بناء AnimationController مخصص ومعقد لحركة بسيطة جداً كتحريك العرض أو الشفافية، بينما يكفي استخدام AnimatedContainer أو AnimatedOpacity.
- نسيان استدعاء dispose() على الـ AnimationController في Explicit Animations مما يسبب تسريباً في الذاكرة (Memory Leak).