diff --git a/lib/src/utils/mistake_popup.dart b/lib/src/utils/mistake_popup.dart index 89463b1..22ae41f 100644 --- a/lib/src/utils/mistake_popup.dart +++ b/lib/src/utils/mistake_popup.dart @@ -52,7 +52,18 @@ class LanguageToolMistakePopup extends StatelessWidget { static const double _defaultVerticalMargin = 25.0; static const double _defaultHorizontalMargin = 10.0; static const double _defaultMaxWidth = 250.0; - static const _iconSize = 25.0; + static const double _logoSize = 25; + static const double _headerIconSize = 12; + + static const double _borderRadius = 10.0; + static const double _mistakeNameFontSize = 11.0; + static const double _mistakeMessageFontSize = 13.0; + static const double _replacementButtonsSpacing = 4.0; + static const double _replacementButtonsSpacingMobile = -6.0; + static const double _paddingBetweenTitle = 14.0; + static const double _titleLetterSpacing = 0.56; + static const double _dismissSplashRadius = 2.0; + static const double _padding = 10.0; /// Renderer used to display this window. final PopupOverlayRenderer popupRenderer; @@ -84,9 +95,11 @@ class LanguageToolMistakePopup extends StatelessWidget { /// Mistake suggestion style. final ButtonStyle? mistakeStyle; - /// [LanguageToolMistakePopup] constructor + /// Optional builder that adds additional actions to the header. + final List Function(BuildContext context)? actionsBuilder; + + /// Creates a [LanguageToolMistakePopup]. const LanguageToolMistakePopup({ - super.key, required this.popupRenderer, required this.mistake, required this.controller, @@ -96,21 +109,12 @@ class LanguageToolMistakePopup extends StatelessWidget { this.horizontalMargin = _defaultHorizontalMargin, this.verticalMargin = _defaultVerticalMargin, this.mistakeStyle, + this.actionsBuilder, + super.key, }); @override Widget build(BuildContext context) { - const _borderRadius = 10.0; - const _mistakeNameFontSize = 11.0; - const _mistakeMessageFontSize = 13.0; - const _replacementButtonsSpacing = 4.0; - const _replacementButtonsSpacingMobile = -6.0; - const _paddingBetweenTitle = 14.0; - const _titleLetterSpacing = 0.56; - const _dismissSplashRadius = 2.0; - - const padding = 10.0; - final availableSpace = _calculateAvailableSpace(context); final colorScheme = Theme.of(context).colorScheme; @@ -149,43 +153,44 @@ class LanguageToolMistakePopup extends StatelessWidget { children: [ Padding( padding: const EdgeInsets.only(left: 4), - child: Row( - children: [ - Expanded( - child: Row( - children: [ - Padding( - padding: const EdgeInsets.only(right: 5.0), - child: Image.asset( - LangToolImages.logo, - width: _iconSize, - height: _iconSize, - package: 'languagetool_textfield', + child: IconTheme( + data: const IconThemeData(size: _headerIconSize), + child: Row( + children: [ + Expanded( + child: Row( + children: [ + Padding( + padding: const EdgeInsets.only(right: 5.0), + child: Image.asset( + LangToolImages.logo, + width: _logoSize, + height: _logoSize, + package: 'languagetool_textfield', + ), ), - ), - const Text('Correct'), - ], + const Text('Correct'), + ], + ), ), - ), - IconButton( - icon: const Icon( - Icons.close, - size: 12, + ...?actionsBuilder?.call(context), + IconButton( + icon: const Icon(Icons.close), + constraints: const BoxConstraints(), + padding: EdgeInsets.zero, + splashRadius: _dismissSplashRadius, + onPressed: () { + _dismissDialog(); + controller.onClosePopup(); + }, ), - constraints: const BoxConstraints(), - padding: EdgeInsets.zero, - splashRadius: _dismissSplashRadius, - onPressed: () { - _dismissDialog(); - controller.onClosePopup(); - }, - ), - ], + ], + ), ), ), Container( margin: const EdgeInsets.only(top: 8), - padding: const EdgeInsets.all(padding), + padding: const EdgeInsets.all(_padding), decoration: BoxDecoration( color: colorScheme.surface, borderRadius: BorderRadius.circular(_borderRadius), @@ -210,7 +215,7 @@ class LanguageToolMistakePopup extends StatelessWidget { ), ), Padding( - padding: const EdgeInsets.only(bottom: padding), + padding: const EdgeInsets.only(bottom: _padding), child: Text( mistake.message, style: const TextStyle(