import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import '../../../settings/settings.dart'; import '../../theme.dart'; class StyledDialog extends StatelessWidget { const StyledDialog({required this.title, required this.child, super.key}); @override Widget build(BuildContext context) { final theme = Theme.of(context); final scale = theme.extension()!; final scaleConfig = theme.extension()!; final textTheme = theme.textTheme; return AlertDialog( elevation: 0, shape: RoundedRectangleBorder( borderRadius: BorderRadius.all( Radius.circular(16 * scaleConfig.borderRadiusScale)), ), contentPadding: const EdgeInsets.all(4), backgroundColor: scale.primaryScale.border, title: Text( title, style: textTheme.titleMedium! .copyWith(color: scale.primaryScale.borderText), textAlign: TextAlign.center, ), titlePadding: const EdgeInsets.fromLTRB(4, 4, 4, 4), content: DecoratedBox( decoration: ShapeDecoration( color: scale.primaryScale.border, shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular( 16 * scaleConfig.borderRadiusScale))), child: DecoratedBox( decoration: ShapeDecoration( color: scale.primaryScale.appBackground, shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular( 12 * scaleConfig.borderRadiusScale))), child: child))); } static Future show( {required BuildContext context, required String title, required Widget child}) => showDialog( context: context, useRootNavigator: false, builder: (context) => AsyncBlocBuilder( builder: (context, state) => MediaQuery( data: MediaQuery.of(context).copyWith( textScaler: TextScaler.linear( state.themePreference.displayScale)), child: StyledDialog(title: title, child: child)))); final String title; final Widget child; @override void debugFillProperties(DiagnosticPropertiesBuilder properties) { super.debugFillProperties(properties); properties.add(StringProperty('title', title)); } }