50 lines
1.4 KiB
Dart
50 lines
1.4 KiB
Dart
import 'package:flutter/material.dart';
|
|
|
|
export 'route.dart';
|
|
export 'router.dart';
|
|
|
|
// Kelas abstrak untuk helper navigasi
|
|
abstract class AppNavigator {
|
|
AppNavigator._();
|
|
|
|
// Kunci global untuk mengakses state navigator
|
|
static final key = GlobalKey<NavigatorState>();
|
|
|
|
// Mendapatkan BuildContext saat ini dari navigator
|
|
static BuildContext get currentContext => key.currentState!.context;
|
|
|
|
// Memeriksa apakah bisa kembali ke halaman sebelumnya
|
|
static bool get canPop => key.currentState!.canPop();
|
|
|
|
// Kembali ke halaman pertama dalam tumpukan navigasi
|
|
static void popUntilIsFirst() {
|
|
return key.currentState!.popUntil(
|
|
(route) => route.isFirst,
|
|
);
|
|
}
|
|
|
|
// Pindah ke halaman baru menggunakan nama rute
|
|
static Future? pushNamed(String route, {arguments}) {
|
|
return key.currentState!.pushNamed(route, arguments: arguments);
|
|
}
|
|
|
|
// Pindah ke halaman baru dan mengganti halaman saat ini
|
|
static Future? pushNamedReplacement(String route, {arguments}) {
|
|
return key.currentState!.pushReplacementNamed(route, arguments: arguments);
|
|
}
|
|
|
|
// Pindah ke halaman baru dan menghapus semua halaman sebelumnya
|
|
static Future? pushNamedAndClear(String route, {arguments}) {
|
|
return key.currentState!.pushNamedAndRemoveUntil(
|
|
route,
|
|
(_) => false,
|
|
arguments: arguments,
|
|
);
|
|
}
|
|
|
|
// Kembali ke halaman sebelumnya jika memungkinkan
|
|
static void pop({result}) {
|
|
if (canPop) return key.currentState!.pop(result);
|
|
}
|
|
}
|