242 lines
9.7 KiB
Dart
Executable File
242 lines
9.7 KiB
Dart
Executable File
import 'package:firebase_app_check/firebase_app_check.dart';
|
|
import 'package:firebase_core/firebase_core.dart';
|
|
import 'package:firebase_messaging/firebase_messaging.dart';
|
|
import 'package:flutter/material.dart';
|
|
import 'package:flutter_dotenv/flutter_dotenv.dart';
|
|
import 'package:nhance_app_pwa/pages/email_verify.dart';
|
|
import 'package:nhance_app_pwa/pages/enrollment/addons.dart';
|
|
import 'package:nhance_app_pwa/pages/enrollment/empDetails.dart';
|
|
import 'package:nhance_app_pwa/pages/enrollment/empReview.dart';
|
|
|
|
import 'package:nhance_app_pwa/pages/login.dart';
|
|
import 'package:nhance_app_pwa/pages/postEnrollment/botman_widget.dart';
|
|
import 'package:nhance_app_pwa/pages/postEnrollment/chatbot.dart';
|
|
import 'package:nhance_app_pwa/pages/postEnrollment/claimprocess.dart';
|
|
import 'package:nhance_app_pwa/pages/postEnrollment/claims.dart';
|
|
import 'package:nhance_app_pwa/pages/postEnrollment/generalexclusionsdeductibles.dart';
|
|
import 'package:nhance_app_pwa/pages/postEnrollment/help.dart';
|
|
import 'package:nhance_app_pwa/pages/postEnrollment/home.dart';
|
|
import 'package:nhance_app_pwa/pages/postEnrollment/planclaimsform.dart';
|
|
import 'package:nhance_app_pwa/pages/postEnrollment/policies.dart';
|
|
import 'package:nhance_app_pwa/pages/postEnrollment/privacypolicy.dart';
|
|
import 'package:nhance_app_pwa/pages/postEnrollment/profile.dart';
|
|
import 'package:nhance_app_pwa/pages/postEnrollment/raisedTicketList.dart';
|
|
import 'package:nhance_app_pwa/pages/postEnrollment/termsofuse.dart';
|
|
import 'package:nhance_app_pwa/pages/postEnrollment/tickets.dart';
|
|
import 'package:nhance_app_pwa/pages/postEnrollment/tickettracklist.dart';
|
|
import 'package:nhance_app_pwa/pages/postEnrollment/wellness.dart';
|
|
import 'package:nhance_app_pwa/pages/session/SetPinBiometric.dart';
|
|
import 'package:nhance_app_pwa/pages/session/changePin.dart';
|
|
import 'package:nhance_app_pwa/pages/session/settingUpPinAndBiometric.dart';
|
|
|
|
import 'package:nhance_app_pwa/pages/verify.dart';
|
|
import 'package:shared_preferences/shared_preferences.dart';
|
|
import 'models/environment.dart';
|
|
import 'package:flutter/foundation.dart';
|
|
// import 'dart:html' as html;
|
|
|
|
void clearLocalStorageOnAppStart() async {
|
|
if (kIsWeb) {
|
|
// Clear localStorage every time the app starts
|
|
// html.window.localStorage.clear();
|
|
final SharedPreferences prefs = await SharedPreferences.getInstance();
|
|
prefs.clear();
|
|
}
|
|
}
|
|
|
|
Future<void> _firebaseMessagingBackgroundHandler(RemoteMessage message) async {
|
|
await Firebase.initializeApp();
|
|
print("Handling background message: ${message.messageId}");
|
|
}
|
|
|
|
Future<void> main() async {
|
|
// clearLocalStorageOnAppStart();
|
|
// html.window.onBeforeUnload.listen((event) {
|
|
// html.window.localStorage.clear(); // ✅ Clears local storage
|
|
// });
|
|
WidgetsFlutterBinding.ensureInitialized();
|
|
// final SharedPreferences prefs = await SharedPreferences.getInstance();
|
|
// prefs.clear();
|
|
if (kIsWeb) {
|
|
await Firebase.initializeApp(
|
|
options: const FirebaseOptions(
|
|
// apiKey: 'AIzaSyC4yHbCX4mQu0jO81pJrDwxKLQlTQWofrc',
|
|
// appId: '1:1084115316849:android:68b14c4ff37f4bbc6c6bd0',
|
|
// messagingSenderId: '1084115316849',
|
|
// projectId: 'nhance-ee8d1'
|
|
apiKey: "AIzaSyC4yHbCX4mQu0jO81pJrDwxKLQlTQWofrc",
|
|
authDomain: "nhance-ee8d1.firebaseapp.com",
|
|
projectId: "nhance-ee8d1",
|
|
storageBucket: "nhance-ee8d1.firebasestorage.app",
|
|
messagingSenderId: "1084115316849",
|
|
appId: "1:1084115316849:web:8fc3b1c886349ae86c6bd0"));
|
|
} else {
|
|
await Firebase.initializeApp();
|
|
await FirebaseAppCheck.instance.activate(
|
|
// webProvider: ReCaptchaV3Provider('recaptcha-v3-site-key'),
|
|
androidProvider: AndroidProvider.playIntegrity,
|
|
appleProvider: AppleProvider.appAttest,
|
|
);
|
|
FirebaseMessaging.onBackgroundMessage(_firebaseMessagingBackgroundHandler);
|
|
|
|
FirebaseMessaging messaging = FirebaseMessaging.instance;
|
|
// NotificationSettings settings = await messaging.requestPermission();
|
|
NotificationSettings settings =
|
|
await FirebaseMessaging.instance.requestPermission(
|
|
alert: true,
|
|
badge: true,
|
|
sound: true,
|
|
);
|
|
print('User granted permission: ${settings.authorizationStatus}');
|
|
|
|
FirebaseMessaging.onMessage.listen((RemoteMessage message) {
|
|
print('Foreground Message: ${message.notification?.title}');
|
|
});
|
|
|
|
FirebaseMessaging.onMessageOpenedApp.listen((RemoteMessage message) {
|
|
print('User tapped on notification');
|
|
});
|
|
}
|
|
|
|
await dotenv.load(fileName: Environment.fileName);
|
|
|
|
// ✅ Get prefs
|
|
final prefs = await SharedPreferences.getInstance();
|
|
|
|
// ✅ Decide initialRoute
|
|
String initialRoute = 'login';
|
|
if (!kIsWeb) {
|
|
if (prefs.containsKey('is_mpin_skipped')) {
|
|
final isMpinSkipped = prefs.getString('is_mpin_skipped');
|
|
if (isMpinSkipped == '0') {
|
|
initialRoute = 'pinPage';
|
|
}
|
|
}
|
|
}
|
|
|
|
runApp(MyApp(initialRoute: initialRoute));
|
|
}
|
|
|
|
class MyApp extends StatelessWidget {
|
|
final String initialRoute;
|
|
|
|
const MyApp({super.key, required this.initialRoute});
|
|
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
return MaterialApp(
|
|
// initialRoute: 'login',
|
|
initialRoute: initialRoute,
|
|
debugShowCheckedModeBanner: false,
|
|
routes: {
|
|
'splash': (context) => SplashScreen(),
|
|
'login': (context) => login(),
|
|
'mailVerify': (context) => MyEmailVerify(
|
|
email: '',
|
|
),
|
|
'verify': (context) => MyVerify(
|
|
verificationId: '',
|
|
mobileNumber: '',
|
|
resendToken: null,
|
|
onResendCode: (String, int) {},
|
|
),
|
|
'pinSettingPage': (context) => pinSettingPage(),
|
|
'pinPage': (context) => pinPage(),
|
|
'changePin': (context) => changePin(),
|
|
'home': (context) => Home(),
|
|
'policies': (context) => policies(),
|
|
'claims': (context) => claims(),
|
|
'help': (context) => help(),
|
|
'claimprocess': (context) => claimprocess(),
|
|
'profile': (context) => profile(),
|
|
'wellness': (context) => wellness(),
|
|
'planclaimsform': (context) => planclaimsform(),
|
|
'tickettracklist': (context) => tickettracklist(
|
|
ticketID: "",
|
|
),
|
|
'privacypolicy': (context) => privacypolicy(),
|
|
'termsofuse': (context) => termsofuse(),
|
|
'generalExclusionsDeductibles': (context) =>
|
|
generalExclusionsDeductibles(),
|
|
// 'home': (context) => kIsWeb ? Home() : BotmanScaffold(currentRoute: 'home', child: Home()),
|
|
// 'policies': (context) => kIsWeb ? policies() : BotmanScaffold(currentRoute: 'policies', child: policies()),
|
|
// 'claims': (context) => kIsWeb ? claims() : BotmanScaffold(currentRoute: 'claims', child: claims()),
|
|
// 'help': (context) => kIsWeb ? help() : BotmanScaffold(currentRoute: 'help', child: help()),
|
|
// 'claimprocess': (context) => kIsWeb ? claimprocess() : BotmanScaffold(currentRoute: 'claimprocess', child: claimprocess()),
|
|
// 'profile': (context) => kIsWeb ? profile() : BotmanScaffold(currentRoute: 'profile', child: profile()),
|
|
// 'wellness': (context) => kIsWeb ? wellness() : BotmanScaffold(currentRoute: 'wellness', child: wellness()),
|
|
// 'planclaimsform': (context) => kIsWeb ? planclaimsform() : BotmanScaffold(currentRoute: 'planclaimsform', child: planclaimsform()),
|
|
// 'claimtracklist': (context) => kIsWeb ? claimtracklist() : BotmanScaffold(currentRoute: 'claimtracklist', child: claimtracklist()),
|
|
// 'privacypolicy': (context) => kIsWeb ? claimtracklist() : BotmanScaffold(currentRoute: 'privacypolicy', child: claimtracklist()),
|
|
// 'termsofuse': (context) => kIsWeb ? termsofuse() : BotmanScaffold(currentRoute: 'termsofuse', child: termsofuse()),
|
|
// 'generalExclusionsDeductibles': (context) => kIsWeb ? generalExclusionsDeductibles() : BotmanScaffold(currentRoute: 'generalExclusionsDeductibles', child: generalExclusionsDeductibles()),
|
|
'chatbot': (context) => chatbot(),
|
|
'empDetails': (context) => empDetails(),
|
|
'addOnsDetails': (context) => addOnsDetails(),
|
|
'empReviewDetails': (context) => empReviewDetails(),
|
|
'tickets': (context) => tickets(),
|
|
'raisedTicketHistory': (context) => raisedTicketHistory(),
|
|
},
|
|
);
|
|
}
|
|
}
|
|
|
|
// Lightweight splash screen to show during app startup
|
|
class SplashScreen extends StatelessWidget {
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
// Simulate a brief delay before redirecting to the login screen
|
|
Future.delayed(Duration(seconds: 2), () {
|
|
Navigator.pushReplacementNamed(context, 'login');
|
|
});
|
|
|
|
return Scaffold(
|
|
body: Container(
|
|
color: Color(0x98FFFCE5), // Semi-transparent background
|
|
child: Center(
|
|
child: // Your GIF loader widget
|
|
Image.asset(
|
|
height: 60,
|
|
width: 60,
|
|
'assets/nhance-loader.gif'), // Adjust path to your GIF loader
|
|
),
|
|
),
|
|
);
|
|
}
|
|
}
|
|
|
|
// class BotmanScaffold extends StatelessWidget {
|
|
// final Widget child;
|
|
// final String currentRoute;
|
|
//
|
|
// const BotmanScaffold({
|
|
// required this.child,
|
|
// required this.currentRoute,
|
|
// super.key,
|
|
// });
|
|
//
|
|
// bool get _showBotman {
|
|
// const excludedRoutes = ['login', 'splash', 'mailVerify', 'verify'];
|
|
// return !excludedRoutes.contains(currentRoute);
|
|
// }
|
|
//
|
|
// @override
|
|
// Widget build(BuildContext context) {
|
|
// return Scaffold(
|
|
// body: Stack(
|
|
// children: [
|
|
// child,
|
|
// if (_showBotman)
|
|
// const Positioned(
|
|
// bottom: 50,
|
|
// right: 0,
|
|
// width: 75,
|
|
// height: 75,
|
|
// child: BotmanWidget(),
|
|
// ),
|
|
// ],
|
|
// ),
|
|
// );
|
|
// }
|
|
// }
|