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