Learn
← Previous Next →

Hari 20: Navigation & Routing

60 min Last updated 09 Apr 2026

Navigation di Flutter

Flutter menggunakan Navigator untuk berpindah antar halaman (Routes). Seperti stack — push untuk buka halaman baru, pop untuk kembali.

import "package:flutter/material.dart";

// Halaman Utama
class HalamanUtama extends StatelessWidget {
  @override Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text("Home")),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            ElevatedButton(
              onPressed: () => Navigator.push(context,
                MaterialPageRoute(builder: (_) => HalamanDetail(nama: "Budi"))),
              child: Text("Ke Halaman Detail"),
            ),
            ElevatedButton(
              onPressed: () async {
                final result = await Navigator.push(context,
                  MaterialPageRoute(builder: (_) => HalamanForm()));
                if (result != null) print("Dapat data: $result");
              },
              child: Text("Ke Form (tunggu hasil)"),
            ),
          ],
        ),
      ),
    );
  }
}

// Halaman Detail dengan parameter
class HalamanDetail extends StatelessWidget {
  final String nama;
  const HalamanDetail({required this.nama, super.key});
  @override Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text("Detail")),
      body: Center(child: Text("Halo, $nama!")),
    );
  }
}

Named Routes

MaterialApp(
  initialRoute: "/",
  routes: {
    "/": (ctx) => HalamanUtama(),
    "/detail": (ctx) => HalamanDetail(nama: ""),
    "/form": (ctx) => HalamanForm(),
  },
)

// Navigasi
Navigator.pushNamed(context, "/detail");
Navigator.pushReplacementNamed(context, "/home");

💡 Notice: Navigator bekerja seperti Stack. push() menambah halaman, pop() menghapus halaman terakhir.

Assignment

Simulasikan Navigator stack dengan push, pop, dan pushReplacement.

Expected output:

→ Membuka: /home
Stack: [/home]
→ Membuka: /produk
Stack: [/home, /produk]
→ Membuka: /detail/1
Stack: [/home, /produk, /detail/1]
← Kembali dari: /detail/1
Stack: [/home, /produk]
↔ Replace ke: /checkout
Stack: [/home, /checkout]
← Kembali dari: /checkout
Stack: [/home]
Tidak bisa pop — halaman pertama!
Dart main.dart
Solution
Output