import 'package:flutter/material.dart'; import 'package:supabase_flutter/supabase_flutter.dart'; import 'package:provider/provider.dart'; import 'package:app_links/app_links.dart'; import 'services/mqtt_service.dart'; import 'screens/login_screen.dart'; import 'screens/register_screen.dart'; import 'screens/home_screen.dart'; import 'screens/analytics_screen.dart'; import 'screens/image_result_screen.dart'; import 'screens/change_password_screen.dart'; import 'screens/forgot_password_screen.dart'; final GlobalKey navigatorKey = GlobalKey(); void main() async { WidgetsFlutterBinding.ensureInitialized(); await Supabase.initialize( url: 'https://ddmhzzegejbsshihzext.supabase.co', anonKey: 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6ImRkbWh6emVnZWpic3NoaWh6ZXh0Iiwicm9sZSI6ImFub24iLCJpYXQiOjE3NzcyMjIyNzAsImV4cCI6MjA5Mjc5ODI3MH0._r-viIQLMXuNNdg4tcn7sJTBO9QqSpSlF7hk43hu2Ks', ); // Listener auth state — handle password recovery Supabase.instance.client.auth.onAuthStateChange.listen((data) { if (data.event == AuthChangeEvent.passwordRecovery) { navigatorKey.currentState?.pushReplacementNamed( '/change_password', arguments: {'dari_reset': true}, ); } }); // Handle deep link saat app sudah jalan final appLinks = AppLinks(); appLinks.uriLinkStream.listen((uri) { final uriStr = uri.toString(); if (uriStr.contains('reset-callback') || uriStr.contains('type=recovery')) { // Supabase akan handle token otomatis via onAuthStateChange debugPrint('Deep link diterima: $uriStr'); } }); runApp( MultiProvider( providers: [ ChangeNotifierProvider(create: (_) => MqttService()..connect()), ], child: const MyApp(), ), ); } class MyApp extends StatelessWidget { const MyApp({super.key}); @override Widget build(BuildContext context) { return MaterialApp( navigatorKey: navigatorKey, title: 'Coffee IoT', debugShowCheckedModeBanner: false, theme: ThemeData( brightness: Brightness.dark, primarySwatch: Colors.green, scaffoldBackgroundColor: Colors.black, ), initialRoute: '/login', routes: { '/login': (context) => const LoginScreen(), '/register': (context) => const RegisterScreen(), '/home': (context) => const HomeScreen(), '/analytics': (context) => const AnalyticsScreen(), '/image_result': (context) => const ImageResultScreen(), '/change_password': (context) => const ChangePasswordScreen(), '/forgot_password': (context) => const ForgotPasswordScreen(), }, ); } }