Sobes.tech
Middle

Kaip pasirinkti tinkamą būdą įgyvendinti animacijas Flutter programoje?

sobes.tech AI

Atsakymas iš AI

Pasirinkimas priklauso nuo animacijos sudėtingumo, jos dažnumo ir naudotojo sąveikos laipsnio.

Pagrindiniai būdai:

  • ImplicitlyAnimatedWidgets: Paprastos pereinančiosios animacijos būsenos keitimui (dydis, spalva, skaidrumas). Automatiškai animuoja savybių pokyčius:

    // Pavyzdys 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 ir AnimationController: Sudėtingesniems ir naudotojo pritaikytiems animacijoms. Reikalauja aiškios animacijos valdymo per AnimationController ir atnaujinimo su AnimatedBuilder:

    // RotationTransition pavyzdys su 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(); // Animacijos kartojimas
    
        _animation = CurvedAnimation(
          parent: _controller,
          curve: Curves.linear, // Linijinė animacijos kreivė
        );
      }
    
      @override
      void dispose() {
        _controller.dispose();
        super.dispose();
      }
    
      @override
      Widget build(BuildContext context) {
        return RotationTransition( // Sukimosi widget'as
          turns: _animation,
          child: Container(
            width: 100,
            height: 100,
            color: Colors.blue,
          ),
        );
      }
    }
    
  • AnimatedWidget: Abstraktus klasė, skirta kurti pakartotinai naudojamus animuotus widget'us. Supaprastina AnimationController priklausomų widget'ų kūrimą:

    // ScaleTransition pavyzdys (paveldėtas iš AnimatedWidget)
    ScaleTransition(
      scale: _animation,
      child: const FlutterLogo(size: 75),
    );
    
  • Hero animacijos: Perėjimai tarp ekranų, kai tas pats widget'as "skrenda" iš vieno ekrano į kitą:

    // Pirmame ekrane
    Hero(tag: 'logo', child: FlutterLogo(size: 50));
    
    // Antrame ekrane
    Hero(tag: 'logo', child: FlutterLogo(size: 200));
    
  • CustomPaint: Naudojamas kuriant naudotojo grafinius piešinius ir jų animaciją. Reikalauja gilios piešimo žinių:

Palyginamasis lentelė:

Būdas Sudėtingumas Kontrolė per animaciją Naudojimas
ImplicitlyAnimatedWidgets Žemas Ribotas Paprasti savybių pakeitimai
AnimatedBuilder/Controller Vidutinis Pilnas Sudėtingos / naudotojo pritaikytos
AnimatedWidget Vidutinis Pilnas Pakartotinai naudojami animuoti widget'ai
Hero animacijos Žemas Ribotas Perėjimai tarp ekranų
CustomPaint Aukštas Pilnas Naudotojo grafika

Pasirinkite paprasčiausią būdą, kuris atitinka animacijos reikalavimus. Paprastiems atvejams rekomenduojami ImplicitlyAnimatedWidgets. Sudėtingesniems ir pritaikytiems scenarijams naudokite AnimatedBuilder su AnimationController. Hero skirtas perėjimams, CustomPaint — sudėtingai grafikai.