import 'dart:async'; import 'package:fl_clash/common/common.dart'; import 'package:fl_clash/providers/providers.dart'; import 'package:fl_clash/state.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; class AppStateManager extends ConsumerStatefulWidget { final Widget child; const AppStateManager({ super.key, required this.child, }); @override ConsumerState createState() => _AppStateManagerState(); } class _AppStateManagerState extends ConsumerState with WidgetsBindingObserver { @override void initState() { super.initState(); WidgetsBinding.instance.addObserver(this); ref.listenManual(layoutChangeProvider, (prev, next) { WidgetsBinding.instance.addPostFrameCallback((_) { if (prev != next) { globalState.cacheHeightMap = {}; } }); }); } @override void dispose() { WidgetsBinding.instance.removeObserver(this); super.dispose(); } @override Future didChangeAppLifecycleState(AppLifecycleState state) async { commonPrint.log("$state"); if (state == AppLifecycleState.paused || state == AppLifecycleState.inactive) { globalState.appController.savePreferences(); } else { render?.resume(); } } @override void didChangePlatformBrightness() { globalState.appController.updateBrightness( WidgetsBinding.instance.platformDispatcher.platformBrightness, ); } @override Widget build(BuildContext context) { return Listener( onPointerHover: (_) { render?.resume(); }, child: widget.child, ); } } class AppEnvManager extends StatelessWidget { final Widget child; const AppEnvManager({ super.key, required this.child, }); @override Widget build(BuildContext context) { if (kDebugMode) { if (globalState.isPre) { return Banner( message: 'DEBUG', location: BannerLocation.topEnd, child: child, ); } } if (globalState.isPre) { return Banner( message: 'PRE', location: BannerLocation.topEnd, child: child, ); } return child; } }