import 'package:fl_clash/manager/message_manager.dart'; import 'package:fl_clash/widgets/scaffold.dart'; import 'package:flutter/material.dart'; extension BuildContextExtension on BuildContext { CommonScaffoldState? get commonScaffoldState { return findAncestorStateOfType(); } showNotifier(String text) { return findAncestorStateOfType()?.message(text); } showSnackBar( String message, { SnackBarAction? action, }) { final width = viewWidth; EdgeInsets margin; if (width < 600) { margin = const EdgeInsets.only( bottom: 16, right: 16, left: 16, ); } else { margin = EdgeInsets.only( bottom: 16, left: 16, right: width - 316, ); } ScaffoldMessenger.of(this).showSnackBar( SnackBar( action: action, content: Text(message), behavior: SnackBarBehavior.floating, duration: const Duration(milliseconds: 1500), margin: margin, ), ); } Size get appSize { return MediaQuery.of(this).size; } double get viewWidth { return appSize.width; } ColorScheme get colorScheme => Theme.of(this).colorScheme; TextTheme get textTheme => Theme.of(this).textTheme; T? findLastStateOfType() { T? state; visitor(Element element) { if (!element.mounted) { return; } if (element is StatefulElement) { if (element.state is T) { state = element.state as T; } } element.visitChildren(visitor); } visitor(this as Element); return state; } }