TKK_E32220332/lib/main.dart

81 lines
2.7 KiB
Dart

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<NavigatorState> navigatorKey = GlobalKey<NavigatorState>();
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(),
},
);
}
}