odoo_loyalty_app/lib/main.dart

78 lines
2.2 KiB
Dart

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<String, dynamic>;
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,
);
},
);
}
}