import "package:flutter/material.dart"; import "package:flutter_riverpod/flutter_riverpod.dart"; import "package:smol_mail/data/providers/providers.dart"; import "package:smol_mail/presentation/theme/theme.dart"; import "package:smol_mail/presentation/routes/app_router.dart"; /// SnackBars need no context through this key, so the client's trust /// warnings can be shown from anywhere in the protocol stack. final rootScaffoldMessengerKey = GlobalKey(); class AppWidget extends ConsumerStatefulWidget { const AppWidget({super.key}); @override ConsumerState createState() => _AppWidgetState(); } class _AppWidgetState extends ConsumerState { @override void initState() { super.initState(); // §4/§8 trust warnings stay on screen until dismissed; ordinary notices // do not use this channel. ref.read(clientProvider).onWarning = (message) { rootScaffoldMessengerKey.currentState?.showSnackBar( SnackBar( backgroundColor: const Color.fromRGBO(198, 40, 40, 1), content: Text(message, style: const TextStyle(color: Colors.white)), duration: const Duration(days: 1), action: SnackBarAction( label: "Dismiss", textColor: Colors.white, onPressed: () => rootScaffoldMessengerKey.currentState?.hideCurrentSnackBar(), ), ), ); }; } @override Widget build(BuildContext context) { return MaterialApp.router( title: "kirakira", theme: appThemeLight, darkTheme: appThemeDark, themeMode: ThemeMode.system, debugShowCheckedModeBanner: false, scaffoldMessengerKey: rootScaffoldMessengerKey, routerConfig: AppRouter(ref).config(), ); } }