From c368843c9f2903d0799fe46f1ef380dda8941ce5 Mon Sep 17 00:00:00 2001 From: Andrew Bekhiet Date: Tue, 9 Sep 2025 15:22:27 +0300 Subject: [PATCH 1/3] style: run dart formatter --- lib/src/utils/mistake_popup.dart | 38 ++++++++++++++++---------------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/lib/src/utils/mistake_popup.dart b/lib/src/utils/mistake_popup.dart index 89463b1..fd30741 100644 --- a/lib/src/utils/mistake_popup.dart +++ b/lib/src/utils/mistake_popup.dart @@ -86,11 +86,11 @@ class LanguageToolMistakePopup extends StatelessWidget { /// [LanguageToolMistakePopup] constructor const LanguageToolMistakePopup({ - super.key, required this.popupRenderer, required this.mistake, required this.controller, required this.mistakePosition, + super.key, this.maxWidth = _defaultMaxWidth, this.maxHeight = double.infinity, this.horizontalMargin = _defaultHorizontalMargin, @@ -100,14 +100,14 @@ class LanguageToolMistakePopup extends StatelessWidget { @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 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; @@ -128,7 +128,7 @@ class LanguageToolMistakePopup extends StatelessWidget { ), decoration: BoxDecoration( color: colorScheme.surface.withValues(alpha: 0.9), - borderRadius: BorderRadius.circular(_borderRadius), + borderRadius: BorderRadius.circular(borderRadius), boxShadow: [ BoxShadow( color: colorScheme.onSurface.withValues(alpha: 0.5), @@ -174,7 +174,7 @@ class LanguageToolMistakePopup extends StatelessWidget { ), constraints: const BoxConstraints(), padding: EdgeInsets.zero, - splashRadius: _dismissSplashRadius, + splashRadius: dismissSplashRadius, onPressed: () { _dismissDialog(); controller.onClosePopup(); @@ -188,7 +188,7 @@ class LanguageToolMistakePopup extends StatelessWidget { padding: const EdgeInsets.all(padding), decoration: BoxDecoration( color: colorScheme.surface, - borderRadius: BorderRadius.circular(_borderRadius), + borderRadius: BorderRadius.circular(borderRadius), ), child: SingleChildScrollView( child: Column( @@ -196,16 +196,16 @@ class LanguageToolMistakePopup extends StatelessWidget { children: [ Padding( padding: const EdgeInsets.only( - bottom: _paddingBetweenTitle, + bottom: paddingBetweenTitle, ), child: Text( mistake.type.name.capitalize(), style: TextStyle( color: colorScheme.onSurface.withValues(alpha: 0.7), - fontSize: _mistakeNameFontSize, + fontSize: mistakeNameFontSize, fontWeight: FontWeight.w600, - letterSpacing: _titleLetterSpacing, + letterSpacing: titleLetterSpacing, ), ), ), @@ -214,15 +214,15 @@ class LanguageToolMistakePopup extends StatelessWidget { child: Text( mistake.message, style: const TextStyle( - fontSize: _mistakeMessageFontSize, + fontSize: mistakeMessageFontSize, ), ), ), Wrap( - spacing: _replacementButtonsSpacing, + spacing: replacementButtonsSpacing, runSpacing: kIsWeb - ? _replacementButtonsSpacing - : _replacementButtonsSpacingMobile, + ? replacementButtonsSpacing + : replacementButtonsSpacingMobile, children: mistake.replacements .map( (replacement) => ElevatedButton( From c376550699a5d270731d859aef2b1b0481f0f30a Mon Sep 17 00:00:00 2001 From: Andrew Bekhiet Date: Tue, 9 Sep 2025 15:49:54 +0300 Subject: [PATCH 2/3] feat: add actions builder to allow adding actions --- lib/src/utils/mistake_popup.dart | 67 +++++++++++++++++--------------- 1 file changed, 36 insertions(+), 31 deletions(-) diff --git a/lib/src/utils/mistake_popup.dart b/lib/src/utils/mistake_popup.dart index fd30741..9c1693e 100644 --- a/lib/src/utils/mistake_popup.dart +++ b/lib/src/utils/mistake_popup.dart @@ -84,18 +84,22 @@ 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({ required this.popupRenderer, required this.mistake, required this.controller, required this.mistakePosition, - super.key, this.maxWidth = _defaultMaxWidth, this.maxHeight = double.infinity, this.horizontalMargin = _defaultHorizontalMargin, this.verticalMargin = _defaultVerticalMargin, this.mistakeStyle, + this.actionsBuilder, + super.key, }); @override @@ -149,38 +153,39 @@ 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: 12), + 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', + ), ), - ), - 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( From 3708476baa70f12700e3e7fd77a5f0538f13ec41 Mon Sep 17 00:00:00 2001 From: Andrew Bekhiet Date: Tue, 9 Sep 2025 15:59:47 +0300 Subject: [PATCH 3/3] refactor: avoid magic numbers style: move all constants to class static members --- lib/src/utils/mistake_popup.dart | 54 ++++++++++++++++---------------- 1 file changed, 27 insertions(+), 27 deletions(-) diff --git a/lib/src/utils/mistake_popup.dart b/lib/src/utils/mistake_popup.dart index 9c1693e..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; @@ -104,17 +115,6 @@ class LanguageToolMistakePopup extends StatelessWidget { @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; @@ -132,7 +132,7 @@ class LanguageToolMistakePopup extends StatelessWidget { ), decoration: BoxDecoration( color: colorScheme.surface.withValues(alpha: 0.9), - borderRadius: BorderRadius.circular(borderRadius), + borderRadius: BorderRadius.circular(_borderRadius), boxShadow: [ BoxShadow( color: colorScheme.onSurface.withValues(alpha: 0.5), @@ -154,7 +154,7 @@ class LanguageToolMistakePopup extends StatelessWidget { Padding( padding: const EdgeInsets.only(left: 4), child: IconTheme( - data: const IconThemeData(size: 12), + data: const IconThemeData(size: _headerIconSize), child: Row( children: [ Expanded( @@ -164,8 +164,8 @@ class LanguageToolMistakePopup extends StatelessWidget { padding: const EdgeInsets.only(right: 5.0), child: Image.asset( LangToolImages.logo, - width: _iconSize, - height: _iconSize, + width: _logoSize, + height: _logoSize, package: 'languagetool_textfield', ), ), @@ -178,7 +178,7 @@ class LanguageToolMistakePopup extends StatelessWidget { icon: const Icon(Icons.close), constraints: const BoxConstraints(), padding: EdgeInsets.zero, - splashRadius: dismissSplashRadius, + splashRadius: _dismissSplashRadius, onPressed: () { _dismissDialog(); controller.onClosePopup(); @@ -190,10 +190,10 @@ class LanguageToolMistakePopup extends StatelessWidget { ), 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), + borderRadius: BorderRadius.circular(_borderRadius), ), child: SingleChildScrollView( child: Column( @@ -201,33 +201,33 @@ class LanguageToolMistakePopup extends StatelessWidget { children: [ Padding( padding: const EdgeInsets.only( - bottom: paddingBetweenTitle, + bottom: _paddingBetweenTitle, ), child: Text( mistake.type.name.capitalize(), style: TextStyle( color: colorScheme.onSurface.withValues(alpha: 0.7), - fontSize: mistakeNameFontSize, + fontSize: _mistakeNameFontSize, fontWeight: FontWeight.w600, - letterSpacing: titleLetterSpacing, + letterSpacing: _titleLetterSpacing, ), ), ), Padding( - padding: const EdgeInsets.only(bottom: padding), + padding: const EdgeInsets.only(bottom: _padding), child: Text( mistake.message, style: const TextStyle( - fontSize: mistakeMessageFontSize, + fontSize: _mistakeMessageFontSize, ), ), ), Wrap( - spacing: replacementButtonsSpacing, + spacing: _replacementButtonsSpacing, runSpacing: kIsWeb - ? replacementButtonsSpacing - : replacementButtonsSpacingMobile, + ? _replacementButtonsSpacing + : _replacementButtonsSpacingMobile, children: mistake.replacements .map( (replacement) => ElevatedButton(