تكرار السؤال: …
الإجابة المختصرة
الـ Ticker يُرسل إشعاراً مع كل فريم شاشة يطلبه المحرك (عادة 60 أو 120 هرتز)، والـ vsync يضمن ربط الـ Ticker بدورة حياة الشاشة لإيقاف تشغيل الحركة عند اختفاء الويدجت منعاً لهدر المعالج والبطارية.
الشرح
يعمل TickerProvider كواجهة تمنح الـ AnimationController وصولاً إلى Ticker مربوط بالـ SchedulerBinding. يمنع استخدام vsync هدر الطاقة، فإذا كانت الشاشة الحالية مغطاة بشاشة أخرى في الـ Navigator أو غير مرئية، يتوقف الـ Ticker عن إطلاق الـ ticks. يتم استخدام SingleTickerProviderStateMixin عند وجود Controller واحد، أو TickerProviderStateMixin عند وجود عدة Controllers.
مثال بالكود
class _PulseState extends State<PulseWidget> with SingleTickerProviderStateMixin {
late final AnimationController _controller = AnimationController(
duration: const Duration(seconds: 2),
vsync: this,
)..repeat(reverse: true);
@override
void dispose() {
_controller.dispose();
super.dispose();
}
}أخطاء شائعة
- استخدام TickerProviderStateMixin بدلاً من SingleTickerProviderStateMixin عند استخدام وحدة تحكم واحدة، مما يضيف أعباء غير ضرورية.
- عدم تمرير vsync أو محاولة تهيئة الـ Controller قبل توفر الـ State المناسبة.