تكرار السؤال: …
الإجابة المختصرة
باستخدام AnimationController.animateWith() وتمرير محاكاة فيزيائية مشتقة من Simulation مثل SpringSimulation مع تحديد الكتلة والصلابة ونسبة التخميد.
الشرح
على عكس الحركات المعتمدة على وقت محدد مسبقاً (Duration-based)، تنتهي الحركات الفيزيائية عندما تفقد الطاقة وتستقر فيزيائياً. تتيح SpringSimulation تحديد mass (الكتلة)، stiffness (صلابة النابض)، و damping (التخميد). هذا النمط هو الأساس لبناء تجارب لمس واقعية تحاكي الفيزياء وتستجيب لسرعة سحب إصبع المستخدم (Fling velocity).
مثال بالكود
void _runSpring(double velocity) {
final spring = SpringDescription(mass: 1.0, stiffness: 100.0, damping: 10.0);
final simulation = SpringSimulation(spring, _controller.value, 1.0, velocity);
_controller.animateWith(simulation);
}أخطاء شائعة
- محاولة محاكاة ارتداد واقعي عبر منحنيات Curves.bounceOut الثابتة بدلاً من استخدام فيزياء حقيقية تأخذ سرعة السحب اللحظية في الحسبان.