image

30 Nov 2025

9K

35K

Membuat Splash Screen Animasi yang Menarik di Flutter

Splash screen adalah elemen pertama yang dilihat pengguna saat membuka aplikasi Anda. Selain berfungsi menyembunyikan waktu pemuatan awal, splash screen juga merupakan peluang emas untuk memperkuat branding dan memberikan kesan pertama yang profesional dan menarik. Dengan Flutter, Anda dapat menciptakan splash screen animasi yang halus dan memukau, meningkatkan pengalaman pengguna secara signifikan.

Mengapa Animasi pada Splash Screen?

Sebuah splash screen statis dapat terasa membosankan, terutama jika waktu pemuatan cukup lama. Animasi dapat membuat waktu tunggu terasa lebih singkat, menarik perhatian pengguna, dan secara visual menyampaikan identitas merek Anda dengan lebih dinamis. Ini adalah cara efektif untuk memulai perjalanan pengguna dalam aplikasi Anda dengan energi dan gaya.

Prasyarat

Sebelum masuk ke animasi, penting untuk memahami bahwa ada dua jenis splash screen:

  1. Splash Screen Native: Ini adalah layar yang ditampilkan oleh sistem operasi (Android/iOS) sebelum aplikasi Flutter sepenuhnya dimuat. Umumnya diatur melalui file konfigurasi native atau menggunakan paket seperti flutter_native_splash. Ini bersifat statis.
  2. Splash Screen Flutter: Ini adalah layar yang kita buat di dalam kerangka kerja Flutter itu sendiri, yang akan muncul setelah Flutter diinisialisasi. Di sinilah kita dapat menambahkan animasi.

Artikel ini akan fokus pada pembuatan splash screen animasi di sisi Flutter. Diasumsikan Anda sudah memiliki proyek Flutter dan telah menginstal splash screen native dasar jika diperlukan.

Konsep Dasar Animasi di Flutter

Flutter menyediakan API animasi yang kuat dan fleksibel. Untuk splash screen animasi sederhana, kita akan menggunakan:

  • AnimationController: Mengelola animasi, termasuk memulai, menghentikan, dan mengulang. Ini membutuhkan TickerProviderStateMixin.
  • Tween: Mendefinisikan rentang nilai yang akan dianimasikan (misalnya, dari 0.0 ke 1.0 untuk opasitas atau skala).
  • CurvedAnimation: Memberikan kurva animasi non-linear (misalnya, Curves.easeOut, Curves.bounceIn) untuk membuat animasi lebih alami.
  • AnimatedBuilder (atau FadeTransition/ScaleTransition): Widget yang membangun kembali UI setiap kali nilai animasi berubah. FadeTransition dan ScaleTransition adalah widget yang lebih spesifik yang dibangun di atas AnimatedBuilder.
  • Navigator.pushReplacement: Untuk navigasi ke halaman utama setelah animasi splash screen selesai, sekaligus menghapus splash screen dari tumpukan navigasi.

Langkah-langkah Membuat Splash Screen Animasi

1. Persiapan Proyek

Pastikan Anda memiliki proyek Flutter. Jika belum, Anda bisa membuatnya:


flutter create my_animated_splash_app
cd my_animated_splash_app

2. Membuat Widget Splash Screen

Buat file baru, misalnya lib/splash_screen.dart. Widget ini akan menjadi StatefulWidget karena kita perlu mengelola status animasi.


// lib/splash_screen.dart
import 'package:flutter/material.dart';
import 'home_screen.dart'; // Asumsikan Anda akan membuat home_screen.dart

class SplashScreenPage extends StatefulWidget {
  const SplashScreenPage({Key? key}) : super(key: key);

  @override
  State createState() => _SplashScreenPageState();
}

class _SplashScreenPageState extends State
    with SingleTickerProviderStateMixin {
  late AnimationController _controller;
  late Animation _animation; // Untuk opasitas dan skala

  @override
  void initState() {
    super.initState();
    // Inisialisasi AnimationController dengan durasi animasi total
    _controller = AnimationController(
      vsync: this,
      duration: const Duration(seconds: 3), // Durasi total animasi 3 detik
    );

    // Buat animasi dari 0.0 (transparan/kecil) ke 1.0 (penuh/normal)
    _animation = Tween(begin: 0.0, end: 1.0).animate(
      CurvedAnimation(
        parent: _controller,
        curve: Curves.easeOutCubic, // Kurva animasi yang mulus
      ),
    );

    // Mulai animasi
    _controller.forward();

    // Tambahkan listener untuk mendeteksi saat animasi selesai
    _controller.addStatusListener((status) {
      if (status == AnimationStatus.completed) {
        // Navigasi ke HomePage dan hapus SplashScreenPage dari tumpukan
        Navigator.pushReplacement(
          context,
          MaterialPageRoute(builder: (context) => const HomePage()),
        );
      }
    });
  }

  @override
  void dispose() {
    _controller.dispose(); // Pastikan controller di-dispose untuk mencegah kebocoran memori
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      backgroundColor: Colors.blueGrey[900], // Latar belakang gelap
      body: Center(
        child: FadeTransition(
          opacity: _animation, // Terapkan animasi fade
          child: ScaleTransition(
            scale: _animation, // Terapkan animasi skala
            child: Column(
              mainAxisAlignment: MainAxisAlignment.center,
              children: [
                Icon(
                  Icons.flash_on, // Contoh ikon
                  size: 100,
                  color: Colors.amber, // Warna ikon
                ),
                const SizedBox(height: 20),
                Text(
                  'Aplikasi Hebatku',
                  style: TextStyle(
                    color: Colors.white,
                    fontSize: 28,
                    fontWeight: FontWeight.bold,
                  ),
                ),
              ],
            ),
          ),
        ),
      ),
    );
  }
}

3. Membuat Halaman Utama (Home Page)

Buat file lib/home_screen.dart sebagai tujuan navigasi setelah splash screen.


// lib/home_screen.dart
import 'package:flutter/material.dart';

class HomePage extends StatelessWidget {
  const HomePage({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('Halaman Utama'),
        backgroundColor: Colors.blueGrey[800],
      ),
      body: Center(
        child: Text(
          'Selamat Datang di Aplikasi!',
          style: TextStyle(fontSize: 24),
        ),
      ),
    );
  }
}

4. Mengatur Splash Screen sebagai Halaman Awal

Terakhir, atur SplashScreenPage sebagai halaman awal aplikasi di lib/main.dart Anda.


// lib/main.dart
import 'package:flutter/material.dart';
import 'splash_screen.dart'; // Impor SplashScreenPage

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

class MyApp extends StatelessWidget {
  const MyApp({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Splash Screen Animasi Flutter',
      theme: ThemeData(
        primarySwatch: Colors.blueGrey,
        visualDensity: VisualDensity.adaptivePlatformDensity,
      ),
      home: const SplashScreenPage(), // Atur SplashScreenPage sebagai rute awal
      debugShowCheckedModeBanner: false,
    );
  }
}

Penjelasan Kode

  • _SplashScreenPageState with SingleTickerProviderStateMixin: Mixin SingleTickerProviderStateMixin diperlukan agar AnimationController dapat berjalan.
  • AnimationController _controller: Dibuat dengan duration 3 detik, yang akan menentukan berapa lama animasi berjalan.
  • Animation _animation: Ini adalah objek animasi itu sendiri. Kita menggunakan Tween(begin: 0.0, end: 1.0) untuk menganimasikan nilai dari 0.0 ke 1.0, yang kemudian diterapkan pada properti opacity dan scale. CurvedAnimation memberikan efek percepatan/perlambatan animasi.
  • _controller.forward(): Memulai animasi dari awal.
  • _controller.addStatusListener: Mendengarkan perubahan status animasi. Ketika status mencapai AnimationStatus.completed, artinya animasi sudah selesai, dan kita melakukan navigasi menggunakan Navigator.pushReplacement.
  • FadeTransition dan ScaleTransition: Ini adalah widget bawaan Flutter yang secara otomatis mendengarkan perubahan pada objek Animation yang diberikan dan menerapkan transformasi opasitas dan skala pada anak-anaknya. Keduanya memanfaatkan _animation yang sama untuk efek yang sinkron.
  • _controller.dispose(): Sangat penting untuk memanggil metode ini di dispose widget untuk melepaskan sumber daya yang digunakan oleh AnimationController dan mencegah kebocoran memori.

Kesimpulan

Membuat splash screen animasi di Flutter adalah cara yang efektif untuk meningkatkan daya tarik visual dan pengalaman pengguna aplikasi Anda. Dengan memahami dasar-dasar AnimationController, Tween, dan Transition widgets, Anda dapat menciptakan berbagai efek animasi yang menarik. Jangan ragu untuk bereksperimen dengan berbagai Curve dan properti animasi lainnya untuk menemukan tampilan yang paling sesuai dengan merek aplikasi Anda.

Related Articles

Dec 19, 2025

Flutter & Firebase Auth: Seamless Social Media Login

Flutter & Firebase Auth: Seamless Social Media Login In today's digital landscape, user authentication is a critical component of almost every application. Pro

Dec 19, 2025

Building a Widget List with Sticky

Building a Widget List with Sticky Header in Flutter Creating dynamic and engaging user interfaces is crucial for modern applications. One common UI pattern th

Dec 19, 2025

Mastering Transform Scale & Rotate Animations in Flutter

Mastering Transform Scale & Rotate Animations in Flutter Flutter's powerful animation framework allows developers to create visually stunning and highly intera