first commit
This commit is contained in:
136
lib/app/services/navigation_service.dart
Normal file
136
lib/app/services/navigation_service.dart
Normal file
@ -0,0 +1,136 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:get/get.dart';
|
||||
import '../routes/app_routes.dart';
|
||||
|
||||
/// Service untuk menangani navigasi dalam aplikasi
|
||||
/// Memisahkan logika navigasi dari controller
|
||||
class NavigationService extends GetxService {
|
||||
static NavigationService get to => Get.find<NavigationService>();
|
||||
|
||||
// Track the current navbar index for warga pages
|
||||
final currentNavIndex = 0.obs;
|
||||
|
||||
/// Inisialisasi service
|
||||
Future<NavigationService> init() async {
|
||||
debugPrint('🧭 NavigationService initialized');
|
||||
return this;
|
||||
}
|
||||
|
||||
/// Set current navbar index
|
||||
void setNavIndex(int index) {
|
||||
currentNavIndex.value = index;
|
||||
}
|
||||
|
||||
/// Navigasi ke halaman Sewa Aset
|
||||
void toSewaAset() {
|
||||
debugPrint('🧭 Navigating to SewaAset');
|
||||
setNavIndex(0); // Set appropriate index
|
||||
Get.toNamed(Routes.SEWA_ASET, preventDuplicates: false);
|
||||
}
|
||||
|
||||
/// Navigasi ke halaman Detail Sewa Aset dengan ID
|
||||
Future<void> toOrderSewaAset(String asetId) async {
|
||||
debugPrint('🧭 Navigating to OrderSewaAset with ID: $asetId');
|
||||
if (asetId.isEmpty) {
|
||||
Get.snackbar(
|
||||
'Error',
|
||||
'ID aset tidak valid',
|
||||
snackPosition: SnackPosition.BOTTOM,
|
||||
backgroundColor: Colors.red,
|
||||
colorText: Colors.white,
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
// Navigasi dengan arguments
|
||||
Get.toNamed(
|
||||
Routes.ORDER_SEWA_ASET,
|
||||
arguments: {'asetId': asetId},
|
||||
preventDuplicates: false,
|
||||
);
|
||||
}
|
||||
|
||||
/// Navigasi ke halaman Order Sewa Paket dengan ID
|
||||
Future<void> toOrderSewaPaket(String paketId) async {
|
||||
debugPrint('🧭 Navigating to OrderSewaPaket with ID: $paketId');
|
||||
if (paketId.isEmpty) {
|
||||
Get.snackbar(
|
||||
'Error',
|
||||
'ID paket tidak valid',
|
||||
snackPosition: SnackPosition.BOTTOM,
|
||||
backgroundColor: Colors.red,
|
||||
colorText: Colors.white,
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
// Navigasi dengan arguments
|
||||
Get.toNamed(
|
||||
Routes.ORDER_SEWA_PAKET,
|
||||
arguments: {'paketId': paketId},
|
||||
preventDuplicates: false,
|
||||
);
|
||||
}
|
||||
|
||||
/// Navigasi kembali dari OrderSewaAset ke SewaAset
|
||||
void backFromOrderSewaAset() {
|
||||
debugPrint('🧭 Navigating back from OrderSewaAset to SewaAset');
|
||||
Get.back();
|
||||
}
|
||||
|
||||
/// Navigasi kembali dari SewaAset ke dashboard warga
|
||||
void backFromSewaAset() {
|
||||
debugPrint('🧭 Navigating back from SewaAset to WargaDashboard');
|
||||
setNavIndex(0); // Home tab
|
||||
Get.offNamed(Routes.WARGA_DASHBOARD);
|
||||
}
|
||||
|
||||
/// Navigasi ke Warga Sewa (tab sewa)
|
||||
void toWargaSewa() {
|
||||
debugPrint('🧭 Navigating to WargaSewa');
|
||||
setNavIndex(1); // Sewa tab
|
||||
Get.offNamed(Routes.WARGA_SEWA);
|
||||
}
|
||||
|
||||
/// Navigasi ke Warga Langganan (tab langganan)
|
||||
void toWargaLangganan() {
|
||||
debugPrint('🧭 Navigating to WargaLangganan');
|
||||
setNavIndex(2); // Langganan tab
|
||||
Get.offNamed(Routes.LANGGANAN);
|
||||
}
|
||||
|
||||
/// Navigasi ke Profile (tab profil)
|
||||
void toProfile() {
|
||||
debugPrint('🧭 Navigating to Profile');
|
||||
setNavIndex(2); // Profile tab
|
||||
Get.offNamed(Routes.PROFILE);
|
||||
}
|
||||
|
||||
/// Navigasi ke dashboard sesuai role
|
||||
void toDashboard(String role) {
|
||||
debugPrint('🧭 Navigating to dashboard for role: $role');
|
||||
switch (role.toLowerCase()) {
|
||||
case 'warga':
|
||||
setNavIndex(0); // Reset to home tab
|
||||
Get.offAllNamed(Routes.WARGA_DASHBOARD);
|
||||
break;
|
||||
case 'petugas_bumdes':
|
||||
Get.offAllNamed(Routes.PETUGAS_BUMDES_DASHBOARD);
|
||||
break;
|
||||
default:
|
||||
Get.offAllNamed(Routes.LOGIN);
|
||||
}
|
||||
}
|
||||
|
||||
/// Navigasi ke login
|
||||
void toLogin() {
|
||||
debugPrint('🧭 Navigating to login');
|
||||
Get.offAllNamed(Routes.LOGIN);
|
||||
}
|
||||
|
||||
/// Navigasi mundur satu langkah
|
||||
void back() {
|
||||
debugPrint('🧭 Going back');
|
||||
Get.back();
|
||||
}
|
||||
}
|
68
lib/app/services/service_manager.dart
Normal file
68
lib/app/services/service_manager.dart
Normal file
@ -0,0 +1,68 @@
|
||||
import 'package:get/get.dart';
|
||||
import 'navigation_service.dart';
|
||||
import '../data/providers/auth_provider.dart';
|
||||
import '../modules/warga/controllers/warga_dashboard_controller.dart';
|
||||
|
||||
/// Abstract class untuk mengelola lifecycle service dan dependency
|
||||
abstract class ServiceManager {
|
||||
/// Getter untuk akses NavigationService
|
||||
static NavigationService get navigationService {
|
||||
if (!Get.isRegistered<NavigationService>()) {
|
||||
Get.put(NavigationService());
|
||||
}
|
||||
return Get.find<NavigationService>();
|
||||
}
|
||||
|
||||
/// Mendaftarkan semua service yang dibutuhkan aplikasi
|
||||
/// Sebaiknya dipanggil di awal aplikasi (main.dart)
|
||||
static void registerServices() {
|
||||
// Register service yang bersifat global dan permanent
|
||||
if (!Get.isRegistered<NavigationService>()) {
|
||||
Get.put(NavigationService());
|
||||
}
|
||||
|
||||
// Register AuthProvider if not already registered
|
||||
if (!Get.isRegistered<AuthProvider>()) {
|
||||
Get.put(AuthProvider(), permanent: true);
|
||||
}
|
||||
|
||||
// Register WargaDashboardController as a permanent controller
|
||||
// This ensures it's always available for the drawer
|
||||
registerWargaDashboardController();
|
||||
}
|
||||
|
||||
/// Register WargaDashboardController as a singleton
|
||||
static void registerWargaDashboardController() {
|
||||
// Make sure Auth Provider is registered first
|
||||
if (!Get.isRegistered<AuthProvider>()) {
|
||||
Get.put(AuthProvider(), permanent: true);
|
||||
}
|
||||
|
||||
// Register WargaDashboardController if not already registered
|
||||
if (!Get.isRegistered<WargaDashboardController>()) {
|
||||
Get.put(WargaDashboardController(), permanent: true);
|
||||
}
|
||||
}
|
||||
|
||||
/// Mendaftarkan controller untuk suatu page
|
||||
/// Sebaiknya dipanggil di method dependencies() dalam Binding class
|
||||
static void registerController<T>(T controller, {bool permanent = false}) {
|
||||
if (Get.isRegistered<T>()) {
|
||||
Get.delete<T>(force: true);
|
||||
}
|
||||
Get.put<T>(controller, permanent: permanent);
|
||||
}
|
||||
|
||||
/// Membersihkan controller ketika tidak digunakan
|
||||
/// Sebaiknya dipanggil dalam method onClose() di controller
|
||||
static void cleanupController<T>() {
|
||||
if (Get.isRegistered<T>()) {
|
||||
Get.delete<T>(force: true);
|
||||
}
|
||||
}
|
||||
|
||||
/// Memeriksa apakah sebuah controller sudah terdaftar
|
||||
static bool isControllerRegistered<T>() {
|
||||
return Get.isRegistered<T>();
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user