78 lines
2.2 KiB
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,
|
|
);
|
|
},
|
|
);
|
|
}
|
|
}
|