İçeriğe geç / Skip to content / Zum Inhalt
Ahmet Balaman LogoAhmet Balaman

Flutter: Geschwindigkeit und Timing von Hero-Animationen

Ahmet Balaman
FlutterHeroAnimationPage TransitionDurationCurveUI/UX

Die Hero-Animation ist einer der schnellsten Wege, das Gefühl einer Flutter-App zu verbessern. Der Unterschied zwischen einem guten und einem großartigen Hero-Effekt liegt meist nicht in der Animation selbst, sondern darin, wie schnell sie läuft und welcher Kurve sie folgt.

Live-Demo

Sie können die Hero-Animation im interaktiven Beispiel unten ausprobieren:

💡 Falls sich das Beispiel nicht öffnet, klicken Sie auf den Link DartPad, um es in einem neuen Tab auszuführen.

Warum die Geschwindigkeit der Hero-Animation zählt

Ein gut abgestimmter Übergang lässt die Oberfläche hochwertig und souverän wirken. Ist er zu langsam, fühlt sich die App schwerfällig an. Ist er zu schnell, verlieren Nutzer den Zusammenhang.

Deshalb wird häufig nach Begriffen wie „flutter hero animation speed“ oder „hero transition duration flutter“ gesucht. Entscheidend ist nicht, Hero überhaupt zu verwenden, sondern das Timing richtig zu treffen.

Grundlegender Hero-Aufbau

Die Hero-Animation benötigt auf beiden Seiten denselben tag.

Hero(
  tag: 'product-image',
  child: Image.network(
    imageUrl,
    fit: BoxFit.cover,
  ),
)

Auf der Zielseite verwenden Sie denselben Tag erneut.

Hero(
  tag: 'product-image',
  child: Image.network(
    imageUrl,
    fit: BoxFit.cover,
  ),
)

Die Dauer des Übergangs ändern

Der einfachste Weg, die Hero-Geschwindigkeit zu beeinflussen, ist die Steuerung der Routendauer über PageRouteBuilder.

Navigator.push(
  context,
  PageRouteBuilder(
    transitionDuration: const Duration(milliseconds: 450),
    pageBuilder: (context, animation, secondaryAnimation) => const DetailPage(),
  ),
);

Damit verschieben Sie das Erlebnis in Richtung eines weicheren oder kompakteren Übergangs.

Mit Curve die Bewegung formen

Die Dauer ist nur die halbe Miete. Die Wahl der Kurve verändert die emotionale Wirkung der Bewegung.

Navigator.push(
  context,
  PageRouteBuilder(
    transitionDuration: const Duration(milliseconds: 500),
    pageBuilder: (context, animation, secondaryAnimation) => const DetailPage(),
    transitionsBuilder: (context, animation, secondaryAnimation, child) {
      final curvedAnimation = CurvedAnimation(
        parent: animation,
        curve: Curves.easeOutCubic,
      );

      return FadeTransition(
        opacity: curvedAnimation,
        child: child,
      );
    },
  ),
);

Einen hochwertigeren Bewegungsaufbau gestalten

In echten Produkten funktioniert Hero oft am besten zusammen mit einigen dezenten Begleiteffekten.

  • Hero für das zentrale Bildelement
  • Ein Fade für begleitenden Text
  • Ein leichter Skalierungseffekt für den letzten Schliff
  • 350–600 ms Routendauer für die Balance

Diese Kombination wirkt besonders gut in E-Commerce-, Portfolio- und Medien-Apps.

Eigener Flight Shuttle

Wenn Sie während der Flugphase mehr Kontrolle möchten, verwenden Sie flightShuttleBuilder.

Hero(
  tag: 'avatar',
  flightShuttleBuilder: (flightContext, animation, direction, fromContext, toContext) {
    return Material(
      color: Colors.transparent,
      child: ScaleTransition(
        scale: CurvedAnimation(parent: animation, curve: Curves.easeOutBack),
        child: const CircleAvatar(radius: 40, backgroundColor: Colors.blue),
      ),
    );
  },
  child: const CircleAvatar(radius: 24, backgroundColor: Colors.blue),
)

Das ist bei Avataren, Produktbildern und symbolgeführten Übergängen sehr nützlich.

Was macht createRectTween?

Mit createRectTween ändern Sie den Weg, den das Hero zwischen den Seiten nimmt.

Hero(
  tag: 'card',
  createRectTween: (begin, end) {
    return MaterialRectArcTween(begin: begin, end: end);
  },
  child: Container(
    width: 120,
    height: 120,
    color: Colors.indigo,
  ),
)

Dadurch bewegt es sich in einem natürlicheren Bogen statt auf einer strengen Geraden.

Häufige Fehler

  • Denselben Tag für mehrere Hero-Widgets verwenden
  • Für eine einfache Interaktion eine sehr lange Dauer wählen
  • Überall dieselbe Kurve nutzen, ohne die Wirkung zu prüfen
  • Quell- und Zielgröße zu stark auseinanderlaufen lassen

Praktischer Leitfaden zum Timing

  • 200–300 ms: sehr schnell, gut für Mikro-Interaktionen
  • 350–500 ms: der sicherste und ausgewogenste Bereich
  • Ab 600 ms: nur für dramatische oder besondere Übergänge

Häufig gestellte Fragen

Warum wirkt meine Hero-Animation langsam?

Prüfen Sie zuerst transitionDuration und vereinfachen Sie dann die Kurve. Sehr weiche Kurven lassen die Bewegung langsamer wirken als erwartet.

Brauche ich zusammen mit Hero auch Seitenübergänge?

Nicht immer, aber die Kombination führt meist zu einem deutlich ausgereifteren Ergebnis.

Wann sollte ich auf Hero verzichten?

Verzichten Sie darauf, wenn das Element auf den Screens eine andere Bedeutung bekommt oder der Übergang das Verständnis nicht unterstützt.

Zusammenfassung

Die Geschwindigkeit der Hero-Animation in Flutter ist ein wesentlicher Teil der Nutzererfahrung und kein Detail am Rande. Mit transitionDuration, CurvedAnimation, flightShuttleBuilder und createRectTween gestalten Sie kontrolliertere, elegantere Bewegungen im Sinne modernen Motion Designs.

Kommentare