Main Logo
  • Home
  • About
  • Kursus
    • Paket Kursus
    • Roadmap Profesi
  • Elearning
  • Blog
Daftar
Main Logo
  • Home
  • About
  • Kursus
    • Paket Kursus
    • Roadmap Profesi
  • Elearning
  • Blog

Membuat Animasi Sederhana di Flutter: Panduan Lengkap untuk Pemula

  • September 26, 2025
  • oleh Edusoft Center
DAFTAR ISI
  • 1. Pendahuluan
  • 2. Mengapa Animasi Penting dalam Aplikasi?
  • 3. Konsep Dasar Animasi di Flutter
    • 3.1 Frame Per Second (FPS)
    • 3.2 Widget Tree
    • 3.3 Implicit vs Explicit Animation
  • 4. Menyiapkan Proyek Flutter
  • 5. Membuat Animasi Sederhana dengan Implicit Animation
    • 5.1 Animasi dengan AnimatedContainer
    • 5.2 Animasi dengan AnimatedOpacity
    • 5.3 Animasi dengan AnimatedAlign
    • 5.4 Animasi dengan AnimatedCrossFade
    • 5.5 Explicit Animation dengan AnimationController
  • 6. Tips Membuat Animasi Lebih Menarik
  • 7. Optimasi Performa Animasi
  • 8. Kesimpulan

1. Pendahuluan

Flutter adalah framework modern yang dikembangkan oleh Google untuk membangun aplikasi lintas platform dengan performa tinggi. Satu basis kode bisa menghasilkan aplikasi untuk Android, iOS, Web, bahkan Desktop. Salah satu keunggulan utama Flutter adalah kemampuannya dalam menghadirkan antarmuka pengguna (UI) yang kaya, interaktif, dan halus.

Salah satu elemen penting dalam desain aplikasi modern adalah animasi. Animasi bukan hanya hiasan visual, melainkan juga alat komunikasi yang memperjelas interaksi pengguna dengan aplikasi. Contohnya:

  • Saat pengguna menekan tombol, ukurannya sedikit membesar agar terasa lebih interaktif.
  • Saat berpindah halaman, muncul efek slide atau fade agar transisi lebih natural.
  • Saat menunggu proses loading, animasi membuat pengalaman lebih menyenangkan.

Banyak aplikasi besar seperti Instagram, WhatsApp, dan aplikasi e-commerce menggunakan animasi dengan bijak untuk meningkatkan user experience (UX). Flutter menyediakan dukungan animasi yang kuat, sehingga developer pemula sekalipun bisa membuat animasi tanpa harus pusing dengan logika yang rumit.

Artikel ini akan membahas cara membuat animasi sederhana di Flutter, mulai dari teori dasar, contoh kode, hingga praktik terbaik.

2. Mengapa Animasi Penting dalam Aplikasi?

Sebelum masuk ke implementasi teknis, mari pahami dulu mengapa animasi penting.

  1. Meningkatkan User Experience (UX)
    Animasi membuat aplikasi terasa lebih hidup. Misalnya, ketika tombol ditekan, ada perubahan warna atau ukuran yang memberi umpan balik instan ke pengguna.
  2. Mengarahkan Perhatian Pengguna
    Dengan animasi, kita bisa menyorot elemen penting. Contoh: notifikasi yang muncul dengan efek geser dari atas layar.
  3. Membuat Transisi Lebih Halus
    Transisi antarhalaman yang instan kadang terasa kaku. Dengan animasi fade atau slide, perpindahan terasa lebih natural.
  4. Memperkuat Identitas Brand
    Banyak aplikasi menambahkan animasi khas untuk memperkuat karakter brand mereka.
  5. Meningkatkan Engagement
    Aplikasi dengan animasi yang baik biasanya lebih disukai pengguna karena terasa modern dan menyenangkan.

3. Konsep Dasar Animasi di Flutter

3.1 Frame Per Second (FPS)

Flutter merender tampilan dengan kecepatan tinggi (biasanya 60 fps). Animasi sebenarnya hanyalah perubahan nilai (misalnya ukuran, warna, posisi) dari waktu ke waktu. Semakin halus transisi, semakin baik animasi terlihat.

3.2 Widget Tree

Semua elemen di Flutter adalah widget. Animasi bekerja dengan cara memperbarui nilai widget dari satu kondisi ke kondisi lain. Flutter kemudian merender ulang bagian yang berubah.

3.3 Implicit vs Explicit Animation

Flutter membagi animasi menjadi dua kategori:

  • Implicit Animations
    Animasi otomatis berdasarkan perubahan nilai. Kita hanya menentukan durasi dan curve. Contoh:
    • AnimatedContainer
    • AnimatedOpacity
    • AnimatedAlign
    • AnimatedCrossFade
  • Explicit Animations
    Animasi dengan kontrol penuh menggunakan AnimationController dan Tween. Digunakan jika kita butuh logika lebih kompleks, misalnya animasi looping, sinkronisasi beberapa objek, atau efek khusus.

4. Menyiapkan Proyek Flutter

  • Pastikan Flutter sudah terinstall di komputer.
  • Buat project baru dengan perintah:
flutter create animasi_flutter

5. Membuat Animasi Sederhana dengan Implicit Animation

Mari kita mulai dengan contoh paling sederhana.

5.1 Animasi dengan AnimatedContainer

Kode berikut membuat sebuah kotak yang berubah ukuran dan warna saat tombol ditekan

import 'package:flutter/material.dart';

void main() {
  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Animasi Demo',
      theme: ThemeData(
        colorScheme: ColorScheme.fromSeed(seedColor: Colors.blue),
      ),
      home: const AnimasiContainer(),
    );
  }
}

class AnimasiContainer extends StatefulWidget {
  const AnimasiContainer({super.key});

  @override
  State<AnimasiContainer> createState() => _AnimasiContainerState();
}

class _AnimasiContainerState extends State<AnimasiContainer> {
  double _lebar = 100;
  double _tinggi = 100;
  Color _warna = Colors.blue;

  void _ubahUkuran() {
    setState(() {
      _lebar = _lebar == 100 ? 200 : 100;
      _tinggi = _tinggi == 100 ? 200 : 100;
      _warna = _warna == Colors.blue ? Colors.red : Colors.blue;
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: const Text("Animasi Container")),
      body: Center(
        child: AnimatedContainer(
          width: _lebar,
          height: _tinggi,
          color: _warna,
          duration: const Duration(seconds: 1),
          curve: Curves.easeInOut,
        ),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: _ubahUkuran,
        child: const Icon(Icons.play_arrow),
      ),
    );
  }
}

Penjelasan kode:

  • AnimatedContainer → widget khusus untuk membuat animasi otomatis.
  • duration → menentukan berapa lama animasi berlangsung.
  • curve → menentukan gaya animasi (misalnya linear, easeInOut, dll).
  • Ketika tombol ditekan, ukuran dan warna berubah dengan efek animasi.

5.2 Animasi dengan AnimatedOpacity

Selain ukuran dan warna, kita juga bisa membuat animasi efek fade in/out.

class AnimasiOpacity extends StatefulWidget {
  @override
  AnimasiOpacityState createState() => AnimasiOpacityState();
}

class AnimasiOpacityState extends State<AnimasiOpacity> {
  double _opacity = 1.0;

  void _ubahOpacity() {
    setState(() {
      _opacity = _opacity == 1.0 ? 0.0 : 1.0;
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: const Text("Animasi Opacity")),
      body: Center(
        child: AnimatedOpacity(
          opacity: _opacity,
          duration: const Duration(seconds: 1),
          child: Container(width: 150, height: 150, color: Colors.green),
        ),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: _ubahOpacity,
        child: const Icon(Icons.visibility),
      ),
    );
  }
}

Di sini, widget akan perlahan menghilang atau muncul ketika tombol ditekan. Efek ini juga sering digunakan untuk menampilkan atau menyembunyikan elemen UI dengan halus.

5.3 Animasi dengan AnimatedAlign

Animasi posisi elemen pada layar :

class AnimasiAlign extends StatefulWidget {
  @override
  State<AnimasiAlign> createState() => _AnimasiAlignState();
}

class _AnimasiAlignState extends State<AnimasiAlign> {
  bool _keKanan = true;

  void _ubahPosisi() {
    setState(() {
      _keKanan = !_keKanan;
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: const Text("Animasi Align")),
      body: AnimatedAlign(
        alignment: _keKanan ? Alignment.centerRight : Alignment.centerLeft,
        duration: const Duration(seconds: 1),
        curve: Curves.easeInOut,
        child: Container(width: 100, height: 100, color: Colors.orange),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: _ubahPosisi,
        child: const Icon(Icons.swap_horiz),
      ),
    );
  }
}

5.4 Animasi dengan AnimatedCrossFade

Untuk mengganti dua widget dengan efek transisi.

class AnimasiCrossFade extends StatefulWidget {
  @override
  State<AnimasiCrossFade> createState() => _AnimasiCrossFadeState();
}

class _AnimasiCrossFadeState extends State<AnimasiCrossFade> {
  bool _tampilPertama = true;

  void _ubahTampilan() {
    setState(() {
      _tampilPertama = !_tampilPertama;
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: const Text("Animasi CrossFade")),
      body: Center(
        child: AnimatedCrossFade(
          firstChild: Container(width: 100, height: 100, color: Colors.purple),
          secondChild: Container(width: 150, height: 150, color: Colors.teal),
          crossFadeState: _tampilPertama
              ? CrossFadeState.showFirst
              : CrossFadeState.showSecond,
          duration: const Duration(seconds: 1),
        ),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: _ubahTampilan,
        child: const Icon(Icons.swap_vert),
      ),
    );
  }
}

5.5 Explicit Animation dengan AnimationController

Jika butuh kontrol lebih kompleks, gunakan AnimationController. Contoh: animasi bergerak maju mundur (loop).

class ExplicitAnimasi extends StatefulWidget {
  @override
  State<ExplicitAnimasi> createState() => _ExplicitAnimasiState();
}

class _ExplicitAnimasiState extends State<ExplicitAnimasi>
    with SingleTickerProviderStateMixin {
  late AnimationController _controller;
  late Animation<double> _animasi;

  @override
  void initState() {
    super.initState();
    _controller =
        AnimationController(vsync: this, duration: const Duration(seconds: 2))
          ..repeat(reverse: true);

    _animasi = Tween<double>(begin: 100, end: 200).animate(_controller);
  }

  @override
  void dispose() {
    _controller.dispose();
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: const Text("Explicit Animation")),
      body: Center(
        child: AnimatedBuilder(
          animation: _animasi,
          builder: (context, child) {
            return Container(
              width: _animasi.value,
              height: _animasi.value,
              color: Colors.blueAccent,
            );
          },
        ),
      ),
    );
  }
}

Dengan cara ini, kita bisa mengontrol animasi lebih detail, termasuk membuat looping, sinkronisasi, dan efek lanjutan.

6. Tips Membuat Animasi Lebih Menarik

  1. Gunakan Durasi yang Tepat
    Animasi terlalu cepat tidak terlihat, terlalu lambat membuat pengguna bosan. Idealnya 200–400ms.
  2. Gunakan Curve yang Natural
    Curves.easeInOut sering digunakan karena terasa lebih halus.
  3. Gabungkan Beberapa Animasi
    Misalnya, ukuran dan warna berubah bersamaan.
  4. Hindari Animasi Berlebihan
    Animasi harus memperjelas, bukan mengganggu.

7. Optimasi Performa Animasi

  • Gunakan widget RepaintBoundary untuk mencegah rendering ulang seluruh layar.
  • Hindari perhitungan berat di dalam setState.
  • Gunakan const widget jika mungkin.
  • Uji animasi di device low-end untuk memastikan tetap halus.

8. Kesimpulan

Animasi di Flutter sangat powerful dan mudah digunakan. Dengan implicit animation seperti AnimatedContainer dan AnimatedOpacity, kita bisa membuat efek sederhana hanya dengan beberapa baris kode. Jika butuh kontrol penuh, explicit animation dengan AnimationController adalah pilihan tepat.

Dengan memanfaatkan animasi, aplikasi terasa lebih interaktif, hidup, dan profesional. Namun, animasi harus digunakan dengan bijak agar tidak mengganggu fokus utama pengguna.


Tags: animasi flutteranimasi sederhana flutteredusoft centerFlutterFlutter animationflutter appflutter mobile developmentflutter pemulaflutter UIflutter webflutter widgetkursus komputer di solokursus komputer di surakartamobile app developmentpelatihan komputer di solo
Previous Post
Next Post

Post comment

Cancel reply

Your email address will not be published. Required fields are marked *

Recent Posts

  • Panduan Lengkap Clean Code dalam Rekayasa Perangkat Lunak: Prinsip, Teknik, dan Contoh Praktis
  • Website Toko Digital Siap Pakai: Solusi Otomatis untuk Bisnis Digital Anda
  • 🔐 Cara Membuat Show/Hide Password dengan JavaScript (Simple & Langsung Bisa!)
  • Tampilan Aplikasi SIPPO Berbasis Google Apps Script Web App
  • SIPADU RT: Solusi Modern Pengelolaan Pengaduan Warga RT/RW Berbasis Google Apps Script

Arsip

  • April 2026
  • March 2026
  • February 2026
  • January 2026
  • September 2025
  • August 2025
  • July 2025
  • March 2019
  • February 2019
  • January 2019
  • December 2018
  • November 2018
  • October 2018
  • September 2018
  • August 2018
  • July 2018
  • June 2018
  • May 2018
  • April 2018
  • March 2018
  • February 2018
  • January 2018
  • December 2017
  • November 2017
  • October 2017
  • September 2017
  • August 2017
  • July 2017
  • June 2017
  • May 2017
  • April 2017
  • March 2017
  • February 2017
  • January 2017
  • December 2016
  • November 2016
  • October 2016
  • September 2016
  • August 2016
  • July 2016
  • June 2016
  • May 2016
  • April 2016
  • March 2016
  • February 2016
  • January 2016
  • December 2015
  • November 2015
  • October 2015
  • September 2015
  • August 2015
  • July 2015
  • June 2015
  • May 2015
  • April 2015
  • March 2015
  • February 2015
  • January 2015
  • December 2014
  • November 2014
  • October 2014
  • September 2014
  • August 2014
  • July 2014
  • June 2014
  • May 2014
  • April 2014
  • March 2014
  • February 2014
  • January 2014
  • December 2013
  • November 2013
  • October 2013
  • September 2013
  • August 2013
  • July 2013
  • June 2013
  • May 2013
  • April 2013
  • March 2013
  • February 2013
  • January 2013
  • December 2012
  • November 2012
  • October 2012
  • September 2012
  • August 2012
  • July 2012
  • June 2012
  • May 2012
  • April 2012
  • December 2011
  • November 2011

Tags

#EdusoftCenter apache web server dns server kursus android kursus database kursus dns dan web server kursus dns server kursus ethical hacking kursus hacking kursus jaringan kursus jaringan linux Kursus Komputer kursus komputer di solo kursus komputer di solo / surakarta kursus komputer di surakarta kursus linux Kursus Linux Forensics kursus linux networking kursus linux security kursus linux server kursus mikrotik kursus networking kursus network security kursus php Kursus PHP dan MySQL kursus php mysql kursus proxy kursus security kursus ubuntu kursus ubuntu server kursus web kursus web security kursus web server kursus wordpress kursus wordpress theme linux MySQL pelatihan komputer di solo PHP security training komputer training komputer di solo tutorial php ubuntu wordpress

© Edusoft Center - Kursus Komputer di Solo | 2010 - 2025 | Privacy Policy | Site Map

All Right Reserved

WhatsApp us