import 'package:flutter/material.dart'; import 'dart:async'; import 'package:tugas_akhir_supabase/services/session_manager.dart'; /// Mixin untuk memeriksa status session di halaman-halaman utama aplikasi mixin SessionCheckerMixin on State { bool _isCheckingSession = false; /// Periksa status session saat halaman dibuka Future checkSessionStatus() async { if (_isCheckingSession) return; _isCheckingSession = true; try { // Tambahkan timeout untuk mencegah blocking final isValid = await SessionManager.isSessionValid().timeout( const Duration(seconds: 3), onTimeout: () { debugPrint('SessionChecker: Session check timed out'); return true; // Assume valid on timeout }, ); if (!isValid && mounted) { // Session tidak valid, update timestamp untuk mencegah pemanggilan berulang await SessionManager.updateLastActiveTime().timeout( const Duration(seconds: 2), onTimeout: () { debugPrint('SessionChecker: Update activity timed out'); return; }, ); } } catch (e) { debugPrint('SessionChecker: Error checking session - $e'); } finally { _isCheckingSession = false; } } /// Perbarui timestamp aktivitas pengguna Future updateUserActivity() async { try { // Tambahkan timeout untuk mencegah blocking await SessionManager.updateLastActiveTime().timeout( const Duration(seconds: 2), onTimeout: () { debugPrint('SessionChecker: Update activity timed out'); return; }, ); } catch (e) { debugPrint('SessionChecker: Error updating activity - $e'); } } /// Panggil di initState untuk memeriksa session void initSessionChecking() { // Periksa session setelah widget dibangun dengan delay // untuk mencegah terlalu banyak operasi di startup Future.delayed(Duration(milliseconds: 500), () { if (mounted) { checkSessionStatus(); } }); } /// Panggil di dispose untuk membersihkan resource void disposeSessionChecking() { // Tidak ada resource yang perlu dibersihkan } }