Skip to main content
ExodeUI

EXODEUI DESKTOP

A little space for good ideas.

Choose your platform to get the official ExodeUI installer.

Looking for Intel Mac or other builds? Explore the web studio or check all download options.

Prefer the browser? Try for free in your browser →
Figma Motion-klynge9 min læst·Af ExodeUI-teamet

Konvertering af Figma-prototypeanimationer til Flutter Physics Widgets

Lær, hvordan du eksporterer Figma-prototypeanimationer til native Flutter SpringSimulation og AnimationController-kode med nul overdragelsesgæld.

Direkte Resumé & Definition

Core Takeaway

For at oversætte Figma-animationer til Flutter konstruerer udviklere typisk AnimationControllers med CurvedAnimations. Autentisk mobilfølelse i Flutter kræver dog SpringSimulation og fysikbaserede bevægelser. ExodeUI oversætter visuelle vektorlag og fjederspændinger direkte til Flutter widgettræer.

Hvorfor CurvedAnimation i Flutter skuffer

Flutter tilbyder standardkurver (Curves.easeInOut, Curves.fastOutSlowIn), men disse er varighedsbundne. Hvis en bruger afbryder en strygebevægelse, snapper varighedskurverne. Ved at udnytte SpringSimulation med SpringDescription (masse, stivhed, dæmpning), bliver Flutter-animationer helt naturlige.

Snippet til produktionsimplementering

Interaktiv komponentimplementering
// Flutter Spring Simulation Widget
import 'package:flutter/material.dart';
import 'package:flutter/physics.dart';

class SpringCard extends StatefulWidget {
  @override
  _SpringCardState createState() => _SpringCardState();
}

class _SpringCardState extends State<SpringCard> with SingleTickerProviderStateMixin {
  late AnimationController _controller;
  
  @override
  void initState() {
    super.initState();
    _controller = AnimationController(vsync: this);
  }

  void _runSpring(double target) {
    final spring = SpringDescription(mass: 1.0, stiffness: 420.0, damping: 24.0);
    final simulation = SpringSimulation(spring, _controller.value, target, 0);
    _controller.animateWith(simulation);
  }

  @override
  Widget build(BuildContext context) {
    return GestureDetector(
      onTapDown: (_) => _runSpring(0.92),
      onTapUp: (_) => _runSpring(1.0),
      child: ScaleTransition(scale: _controller, child: Card(child: Text("Exode Flutter"))),
    );
  }
}

Relaterede vejledninger og eksempler

Design interaktiv UI én gang. Lever den samme fil.

Byg tilstande, fjederfysik og logik visuelt i ExodeUI, og afspil den samme fil i React, SwiftUI, Flutter og mere. Kom gratis i gang.

Prøv gratis