content: 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<AppStateManager> createState() => _AppStateManagerState();
  }
  
  class _AppStateManagerState extends ConsumerState<AppStateManager>
      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<void> 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;
    }
  }
  