import 'dart:async'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:relationship_saver/app/relationship_saver_app.dart'; import 'package:relationship_saver/core/observability/sentry_init.dart'; import 'package:relationship_saver/features/ai_digest/application/llm_digest_background_scheduler.dart'; import 'package:relationship_saver/features/ai_digest/application/llm_digest_orchestrator.dart'; import 'package:workmanager/workmanager.dart'; export 'package:relationship_saver/app/relationship_saver_app.dart'; @pragma('vm:entry-point') void llmDigestCallbackDispatcher() { Workmanager().executeTask(( String taskName, Map? inputData, ) async { if (taskName != llmDigestTaskName && taskName != Workmanager.iOSBackgroundTask) { return true; } WidgetsFlutterBinding.ensureInitialized(); final ProviderContainer container = ProviderContainer(); try { await container.read(llmDigestOrchestratorProvider).runScheduledDigest(); return true; } finally { container.dispose(); } }); } Future main() async { WidgetsFlutterBinding.ensureInitialized(); if (_supportsWorkmanagerPlatform()) { await Workmanager().initialize(llmDigestCallbackDispatcher); } final SentryInit sentry = SentryInit(); await sentry.initialize( appRunner: () { runApp( ProviderScope( overrides: [sentryInitProvider.overrideWithValue(sentry)], child: const RelationshipSaverApp(), ), ); }, ); } bool _supportsWorkmanagerPlatform() { if (kIsWeb) { return false; } return defaultTargetPlatform == TargetPlatform.iOS || defaultTargetPlatform == TargetPlatform.android; }