import 'package:auth/auth.dart'; import 'package:flutter/material.dart'; import 'package:flutter_localizations/flutter_localizations.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:sf_app_platform/navigation/app_router.dart'; import 'package:navigation/navigation.dart'; import 'package:sf_app_platform/providers/app_state_provider.dart'; import 'package:sf_app_platform/providers/permissions/permissions_provider.dart'; import 'package:sf_app_platform/providers/wallet_heartbeat_service.dart'; import 'package:sf_infrastructure/sf_infrastructure.dart'; import 'package:sf_shared/sf_shared.dart'; import 'package:sf_localizations/sf_localizations.dart'; import 'package:utils/utils.dart'; import 'package:fonts/fonts.dart'; class SaveFamilyApp extends ConsumerStatefulWidget { const SaveFamilyApp({super.key}); @override SaveFamilyAppState createState() => SaveFamilyAppState(); } class SaveFamilyAppState extends ConsumerState with WidgetsBindingObserver { late final WalletHeartbeatService walletHeartbeat; @override void initState() { super.initState(); WidgetsBinding.instance.addObserver(this); walletHeartbeat = WalletHeartbeatService( repository: ref.read(treezorRepositoryProvider), sessionLocal: SessionLocalDatasourceImpl(), onError: () => appRouter.go(AppRoutes.scaTreezor), ); onBeforeSessionCleared = walletHeartbeat.stop; // walletHeartbeat.start(); } @override void dispose() { walletHeartbeat.stop(); WidgetsBinding.instance.removeObserver(this); super.dispose(); } @override void didChangeAppLifecycleState(AppLifecycleState state) { debugPrint('State: $state'); ref.read(appLifecycleStateProvider.notifier).setState(state); if (state == AppLifecycleState.resumed) { // walletHeartbeat.start(); ref.read(permissionsProvider.notifier).checkPermissions(); } else if (state == AppLifecycleState.paused) { // walletHeartbeat.stop(); } super.didChangeAppLifecycleState(state); } @override Widget build(BuildContext context) { SizeUtils.init(context: context); return MaterialApp.router( title: 'SaveFamily', theme: ThemeData( fontFamily: AppFonts.stolzl, colorScheme: ColorScheme.fromSeed(seedColor: const Color(0xFF329E95)), ), routerConfig: appRouter, debugShowCheckedModeBanner: false, localizationsDelegates: [ // CountryLocalizations.delegate, SFLocalizations.delegate, GlobalMaterialLocalizations.delegate, GlobalCupertinoLocalizations.delegate, GlobalWidgetsLocalizations.delegate, ], supportedLocales: [for (final lang in supportedLanguages) Locale(lang)], localeResolutionCallback: (locale, supportedLocales) { if (locale == null) return supportedLocales.first; for (var supportedLocale in supportedLocales) { if (supportedLocale.languageCode == locale.languageCode) { return supportedLocale; } } return supportedLocales.first; }, ); } }