import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:path_provider/path_provider.dart'; import 'package:shared_preferences/shared_preferences.dart'; import 'app.dart'; import 'providers/settings_provider.dart'; const _widgetChannel = MethodChannel('com.fabledapp.fabled_app/widget'); void main() async { WidgetsFlutterBinding.ensureInitialized(); final prefs = await SharedPreferences.getInstance(); final appDir = await getApplicationDocumentsDirectory(); runApp( ProviderScope( overrides: [ sharedPreferencesProvider.overrideWithValue(prefs), cookiesPathProvider.overrideWithValue(appDir.path), ], child: const _WidgetIntentListener(child: FabledApp()), ), ); } // Listens for MethodChannel calls from the native Android widget. class _WidgetIntentListener extends StatefulWidget { final Widget child; const _WidgetIntentListener({required this.child}); @override State<_WidgetIntentListener> createState() => _WidgetIntentListenerState(); } class _WidgetIntentListenerState extends State<_WidgetIntentListener> { @override void initState() { super.initState(); _widgetChannel.setMethodCallHandler((call) async { if (call.method == 'openChat') { WidgetsBinding.instance.addPostFrameCallback((_) { if (context.mounted) { Navigator.of(context, rootNavigator: true) .pushNamedAndRemoveUntil('/chat', (_) => false); } }); } }); } @override Widget build(BuildContext context) => widget.child; }