Sobes.tech
Middle

Ako si vybrať vhodný spôsob implementácie animácií v aplikácii Flutter?

sobes.tech AI

Odpoveď od AI

Výber závisí od zložitosti animácie, jej frekvencie a stupňa interakcie s používateľom.

Hlavné spôsoby:

  • ImplicitlyAnimatedWidgets: Jednoduché prechodové animácie na zmenu vlastností widgetov (veľkosť, farba, priehľadnosť). Automaticky animujú zmeny vlastností.
    // Príklad AnumatedContainer
    AnimatedContainer(
      duration: const Duration(seconds: 1),
      width: _size,
      height: _size,
      color: _color,
      alignment: Alignment.center,
      curve: Curves.fastOutSlowIn,
      child: const FlutterLogo(size: 75),
    );
    
  • AnimatedBuilder a AnimationController: Pre zložitejšie a vlastné animácie. Vyžadujú priame riadenie animácie cez AnimationController a prekreslenie pomocou AnimatedBuilder.
    // Príklad RotationTransition s AnimationController
    class RotatingSquare extends StatefulWidget {
      @override
      _RotatingSquareState createState() => _RotatingSquareState();
    }
    
    class _RotatingSquareState extends State<RotatingSquare> with SingleTickerProviderStateMixin {
      late AnimationController _controller;
      late Animation<double> _animation;
    
      @override
      void initState() {
        super.initState();
        _controller = AnimationController(
          duration: const Duration(seconds: 2),
          vsync: this,
        )..repeat(); // Opakuje animáciu
    
        _animation = CurvedAnimation(
          parent: _controller,
          curve: Curves.linear, // Lineárna krivka
        );
      }
    
      @override
      void dispose() {
        _controller.dispose();
        super.dispose();
      }
    
      @override
      Widget build(BuildContext context) {
        return RotationTransition( // Widget pre otáčanie
          turns: _animation,
          child: Container(
            width: 100,
            height: 100,
            color: Colors.blue,
          ),
        );
      }
    }
    
  • AnimatedWidget: Abstraktná trieda na vytváranie znovupoužiteľných animovaných widgetov. Zjednodušuje tvorbu widgetov závislých od AnimationController.
    // Príklad ScaleTransition (zdedí od AnimatedWidget)
    ScaleTransition(
      scale: _animation,
      child: const FlutterLogo(size: 75),
    );
    
  • Hero animácie: Animácie prechodu medzi obrazovkami, keď ten istý widget "lietá" z jednej obrazovky na druhú.
    // Na prvom obrazovke
    Hero(tag: 'logo', child: FlutterLogo(size: 50));
    
    // Na druhej obrazovke
    Hero(tag: 'logo', child: FlutterLogo(size: 200));
    
  • CustomPaint: Na kreslenie vlastnej grafiky a jej animáciu. Vyžaduje hlboké pochopenie kreslenia na plátne.

Porovnávacia tabuľka:

Metóda Zložitosť Kontrola nad animáciou Použitie
ImplicitlyAnimatedWidgets Nízka Obmedzená Jednoduché zmeny vlastností
AnimatedBuilder/Controller Stredná Plná Zložité/personalizované animácie
AnimatedWidget Stredná Plná Znovupoužiteľné animované widgety
Hero animácie Nízka Obmedzená Prechody medzi obrazovkami
CustomPaint Vysoká Plná Vlastná grafika

Vyberte najjednoduchšiu metódu, ktorá spĺňa požiadavky na animáciu. Pre jednoduché prípady sú vhodné ImplicitlyAnimatedWidgets. Pre zložitejšie a vlastné scenáre použite AnimatedBuilder s AnimationController. Hero pre prechody, CustomPaint pre zložitú grafiku.