Files
bumrent_app/lib/app/services/navigation_service.dart
Andreas Malvino c4dd4fdfa2 fitur order paket
2025-06-05 17:00:44 +07:00

164 lines
4.3 KiB
Dart

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 Order 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 Pembayaran Sewa dengan ID sewa
Future<void> navigateToPembayaranSewa(String sewaId) async {
debugPrint('🧭 Navigating to PembayaranSewa with ID: $sewaId');
if (sewaId.isEmpty) {
Get.snackbar(
'Error',
'ID sewa tidak valid',
snackPosition: SnackPosition.BOTTOM,
backgroundColor: Colors.red,
colorText: Colors.white,
);
return;
}
// Navigasi dengan arguments
Get.offAndToNamed(
Routes.PEMBAYARAN_SEWA,
arguments: {'sewaId': sewaId},
);
}
/// Kembali ke halaman Sewa Aset
void navigateToSewaAset() {
debugPrint('🧭 Navigating back to SewaAset');
Get.offAllNamed(Routes.SEWA_ASET);
}
/// 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();
}
}