import 'dart:io'; import 'dart:convert'; import 'package:flutter/material.dart'; import 'package:workmanager/workmanager.dart'; import 'package:shared_preferences/shared_preferences.dart'; import 'package:odoo_rpc/odoo_rpc.dart'; import 'screens/login_screen.dart'; import 'screens/main_shell.dart'; import 'services/odoo_service.dart'; import 'services/config.dart'; import 'services/background_service.dart'; import 'services/notification_service.dart'; import 'services/theme_manager.dart'; void main() async { WidgetsFlutterBinding.ensureInitialized(); // Initialize local notifications and request permission final notifService = NotificationService(); await notifService.initialize(); await notifService.requestPermission(); // Initialize cached theme configuration await ThemeManager.instance.initialize(); if (Platform.isAndroid || Platform.isIOS) { Workmanager().initialize( callbackDispatcher, isInDebugMode: false, ); Workmanager().registerPeriodicTask( "odoo-loyalty-push-task", "fetch_notifications", frequency: const Duration(minutes: 15), ); } final prefs = await SharedPreferences.getInstance(); final sessionStr = prefs.getString('odoo_session'); Widget homeWidget = const LoginScreen(); if (sessionStr != null) { try { final sessionMap = json.decode(sessionStr) as Map; final session = OdooSession.fromJson(sessionMap); final service = OdooService(); service.connect(AppConfig.odooUrl, session: session); homeWidget = MainShell(partnerId: session.partnerId); } catch (e) { homeWidget = const LoginScreen(); } } runApp(OdooLoyaltyApp(homeWidget: homeWidget)); } class OdooLoyaltyApp extends StatelessWidget { final Widget homeWidget; const OdooLoyaltyApp({super.key, required this.homeWidget}); @override Widget build(BuildContext context) { return ListenableBuilder( listenable: ThemeManager.instance, builder: (context, _) { return MaterialApp( title: 'Mie Mapan Loyalty App', debugShowCheckedModeBanner: false, theme: ThemeManager.instance.themeData, home: homeWidget, ); }, ); } }