Junior — Middle
Tudna az Flutterben történő animációk megvalósítási lehetőségeiről és azok jellemzőiről beszélni?
sobes.tech MI
Válasz az MI-től
A Flutterben a animációk beépített animációs keretrendszer segítségével valósulnak meg, amely lehetővé teszi sima és testreszabható átmenetek létrehozását. Főbb lehetőségek:
- Implicit animációk — egyszerű animációk, ahol elegendő megváltoztatni a widget tulajdonságát, például
AnimatedContainer,AnimatedOpacity. Ezek automatikusan animálódnak. - Explicit animációk — rugalmasabbak, szükség van egy
AnimationController-re, amely lehetővé teszi az idő, görbék és az animáció állapotainak kezelését. - Tween — meghatározza az értéktartományt az animációhoz (például 0-tól 1-ig).
- AnimationController — az animáció idejét irányítja, indítható, megállítható, ismételhető.
- CurvedAnimation — lehetővé teszi egy változási görbe beállítását (ease-in, ease-out stb.).
Példa egy explicit méretváltoztatási animációra:
class MyAnimatedWidget extends StatefulWidget {
@override
_MyAnimatedWidgetState createState() => _MyAnimatedWidgetState();
}
class _MyAnimatedWidgetState extends State<MyAnimatedWidget> with SingleTickerProviderStateMixin {
late AnimationController _controller;
late Animation<double> _animation;
@override
void initState() {
super.initState();
_controller = AnimationController(
duration: const Duration(seconds: 2),
vsync: this,
);
_animation = Tween<double>(begin: 100, end: 200).animate(
CurvedAnimation(parent: _controller, curve: Curves.easeInOut),
);
_controller.repeat(reverse: true);
}
@override
void dispose() {
_controller.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return AnimatedBuilder(
animation: _animation,
builder: (context, child) {
return Container(
width: _animation.value,
height: _animation.value,
color: Colors.blue,
);
},
);
}
}
Jellemzők:
- Magas teljesítmény a motor szintjén történő renderelésnek köszönhetően.
- Animációk kombinálásának lehetősége.
- Gesztusok és interaktív animációk támogatása.
- Jó integráció a Flutter widgetekkel.