mirror of
https://github.com/AppFlowy-IO/AppFlowy.git
synced 2025-11-16 18:37:40 +00:00
fix: toolbar tooltip message is incorrect on Windows (#7572)
* fix: some toolbar text display error * chore: change string id to enum string id
This commit is contained in:
parent
e6b0c8ff05
commit
9db87944f2
@ -10,29 +10,30 @@ import 'package:flowy_infra_ui/style_widget/icon_button.dart';
|
|||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
|
|
||||||
import 'custom_placeholder_toolbar_item.dart';
|
import 'custom_placeholder_toolbar_item.dart';
|
||||||
|
import 'toolbar_id_enum.dart';
|
||||||
|
|
||||||
final List<ToolbarItem> customMarkdownFormatItems = [
|
final List<ToolbarItem> customMarkdownFormatItems = [
|
||||||
_FormatToolbarItem(
|
_FormatToolbarItem(
|
||||||
id: 'bold',
|
id: ToolbarId.bold,
|
||||||
name: 'bold',
|
name: 'bold',
|
||||||
svg: FlowySvgs.toolbar_bold_m,
|
svg: FlowySvgs.toolbar_bold_m,
|
||||||
),
|
),
|
||||||
group1PaddingItem,
|
group1PaddingItem,
|
||||||
_FormatToolbarItem(
|
_FormatToolbarItem(
|
||||||
id: 'underline',
|
id: ToolbarId.underline,
|
||||||
name: 'underline',
|
name: 'underline',
|
||||||
svg: FlowySvgs.toolbar_underline_m,
|
svg: FlowySvgs.toolbar_underline_m,
|
||||||
),
|
),
|
||||||
group1PaddingItem,
|
group1PaddingItem,
|
||||||
_FormatToolbarItem(
|
_FormatToolbarItem(
|
||||||
id: 'italic',
|
id: ToolbarId.italic,
|
||||||
name: 'italic',
|
name: 'italic',
|
||||||
svg: FlowySvgs.toolbar_inline_italic_m,
|
svg: FlowySvgs.toolbar_inline_italic_m,
|
||||||
),
|
),
|
||||||
];
|
];
|
||||||
|
|
||||||
final ToolbarItem customInlineCodeItem = _FormatToolbarItem(
|
final ToolbarItem customInlineCodeItem = _FormatToolbarItem(
|
||||||
id: 'code',
|
id: ToolbarId.code,
|
||||||
name: 'code',
|
name: 'code',
|
||||||
svg: FlowySvgs.toolbar_inline_code_m,
|
svg: FlowySvgs.toolbar_inline_code_m,
|
||||||
group: 2,
|
group: 2,
|
||||||
@ -40,12 +41,12 @@ final ToolbarItem customInlineCodeItem = _FormatToolbarItem(
|
|||||||
|
|
||||||
class _FormatToolbarItem extends ToolbarItem {
|
class _FormatToolbarItem extends ToolbarItem {
|
||||||
_FormatToolbarItem({
|
_FormatToolbarItem({
|
||||||
required String id,
|
required ToolbarId id,
|
||||||
required String name,
|
required String name,
|
||||||
required FlowySvgData svg,
|
required FlowySvgData svg,
|
||||||
super.group = 1,
|
super.group = 1,
|
||||||
}) : super(
|
}) : super(
|
||||||
id: 'editor.$id',
|
id: id.id,
|
||||||
isActive: showInAnyTextType,
|
isActive: showInAnyTextType,
|
||||||
builder: (
|
builder: (
|
||||||
context,
|
context,
|
||||||
@ -89,8 +90,8 @@ class _FormatToolbarItem extends ToolbarItem {
|
|||||||
if (tooltipBuilder != null) {
|
if (tooltipBuilder != null) {
|
||||||
return tooltipBuilder(
|
return tooltipBuilder(
|
||||||
context,
|
context,
|
||||||
id,
|
id.id,
|
||||||
getTooltipText(id),
|
_getTooltipText(id),
|
||||||
child,
|
child,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@ -99,44 +100,32 @@ class _FormatToolbarItem extends ToolbarItem {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
String getTooltipText(String id) {
|
String _getTooltipText(ToolbarId id) {
|
||||||
switch (id) {
|
switch (id) {
|
||||||
case 'underline':
|
case ToolbarId.underline:
|
||||||
return '${LocaleKeys.toolbar_underline.tr()}${shortcutTooltips(
|
return '${LocaleKeys.toolbar_underline.tr()}${shortcutTooltips(
|
||||||
'⌘ + U',
|
'⌘ + U',
|
||||||
'CTRL + U',
|
'CTRL + U',
|
||||||
'CTRL + U',
|
'CTRL + U',
|
||||||
)}';
|
)}';
|
||||||
case 'bold':
|
case ToolbarId.bold:
|
||||||
return '${LocaleKeys.toolbar_bold.tr()}${shortcutTooltips(
|
return '${LocaleKeys.toolbar_bold.tr()}${shortcutTooltips(
|
||||||
'⌘ + B',
|
'⌘ + B',
|
||||||
'CTRL + B',
|
'CTRL + B',
|
||||||
'CTRL + B',
|
'CTRL + B',
|
||||||
)}';
|
)}';
|
||||||
case 'italic':
|
case ToolbarId.italic:
|
||||||
return '${LocaleKeys.toolbar_italic.tr()}${shortcutTooltips(
|
return '${LocaleKeys.toolbar_italic.tr()}${shortcutTooltips(
|
||||||
'⌘ + I',
|
'⌘ + I',
|
||||||
'CTRL + I',
|
'CTRL + I',
|
||||||
'CTRL + I',
|
'CTRL + I',
|
||||||
)}';
|
)}';
|
||||||
case 'strikethrough':
|
case ToolbarId.code:
|
||||||
return '${LocaleKeys.toolbar_strike.tr()}${shortcutTooltips(
|
|
||||||
'⌘ + SHIFT + S',
|
|
||||||
'CTRL + SHIFT + S',
|
|
||||||
'CTRL + SHIFT + S',
|
|
||||||
)}';
|
|
||||||
case 'code':
|
|
||||||
return '${LocaleKeys.document_toolbar_inlineCode.tr()}${shortcutTooltips(
|
return '${LocaleKeys.document_toolbar_inlineCode.tr()}${shortcutTooltips(
|
||||||
'⌘ + E',
|
'⌘ + E',
|
||||||
'CTRL + E',
|
'CTRL + E',
|
||||||
'CTRL + E',
|
'CTRL + E',
|
||||||
)}';
|
)}';
|
||||||
case 'align_left':
|
|
||||||
return LocaleKeys.document_toolbar_alignLeft.tr();
|
|
||||||
case 'align_center':
|
|
||||||
return LocaleKeys.document_toolbar_alignCenter.tr();
|
|
||||||
case 'align_right':
|
|
||||||
return LocaleKeys.document_toolbar_alignRight.tr();
|
|
||||||
default:
|
default:
|
||||||
return '';
|
return '';
|
||||||
}
|
}
|
||||||
|
|||||||
@ -6,11 +6,12 @@ import 'package:appflowy_editor/appflowy_editor.dart' hide ColorPicker;
|
|||||||
import 'package:flowy_infra_ui/flowy_infra_ui.dart';
|
import 'package:flowy_infra_ui/flowy_infra_ui.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
|
|
||||||
const _kHighlightColorItemId = 'editor.highlightColor';
|
import 'toolbar_id_enum.dart';
|
||||||
|
|
||||||
String? _customHighlightColorHex;
|
String? _customHighlightColorHex;
|
||||||
|
|
||||||
final customHighlightColorItem = ToolbarItem(
|
final customHighlightColorItem = ToolbarItem(
|
||||||
id: _kHighlightColorItemId,
|
id: ToolbarId.highlightColor.id,
|
||||||
group: 1,
|
group: 1,
|
||||||
isActive: showInAnyTextType,
|
isActive: showInAnyTextType,
|
||||||
builder: (context, editorState, highlightColor, iconColor, tooltipBuilder) =>
|
builder: (context, editorState, highlightColor, iconColor, tooltipBuilder) =>
|
||||||
@ -107,7 +108,7 @@ class _HighlightColorPickerWidgetState
|
|||||||
|
|
||||||
return widget.tooltipBuilder?.call(
|
return widget.tooltipBuilder?.call(
|
||||||
context,
|
context,
|
||||||
_kHighlightColorItemId,
|
ToolbarId.highlightColor.id,
|
||||||
AppFlowyEditorL10n.current.highlightColor,
|
AppFlowyEditorL10n.current.highlightColor,
|
||||||
child,
|
child,
|
||||||
) ??
|
) ??
|
||||||
|
|||||||
@ -4,10 +4,10 @@ import 'package:appflowy_editor/appflowy_editor.dart';
|
|||||||
import 'package:flowy_infra_ui/style_widget/icon_button.dart';
|
import 'package:flowy_infra_ui/style_widget/icon_button.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
|
|
||||||
const _kLinkItemId = 'editor.link';
|
import 'toolbar_id_enum.dart';
|
||||||
|
|
||||||
final customLinkItem = ToolbarItem(
|
final customLinkItem = ToolbarItem(
|
||||||
id: _kLinkItemId,
|
id: ToolbarId.link.id,
|
||||||
group: 4,
|
group: 4,
|
||||||
isActive: onlyShowInSingleSelectionAndTextType,
|
isActive: onlyShowInSingleSelectionAndTextType,
|
||||||
builder: (context, editorState, highlightColor, iconColor, tooltipBuilder) {
|
builder: (context, editorState, highlightColor, iconColor, tooltipBuilder) {
|
||||||
@ -39,7 +39,7 @@ final customLinkItem = ToolbarItem(
|
|||||||
if (tooltipBuilder != null) {
|
if (tooltipBuilder != null) {
|
||||||
return tooltipBuilder(
|
return tooltipBuilder(
|
||||||
context,
|
context,
|
||||||
_kLinkItemId,
|
ToolbarId.highlightColor.id,
|
||||||
AppFlowyEditorL10n.current.link,
|
AppFlowyEditorL10n.current.link,
|
||||||
child,
|
child,
|
||||||
);
|
);
|
||||||
|
|||||||
@ -4,11 +4,10 @@ import 'package:appflowy_editor/appflowy_editor.dart';
|
|||||||
import 'package:flowy_infra_ui/flowy_infra_ui.dart';
|
import 'package:flowy_infra_ui/flowy_infra_ui.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
|
|
||||||
const placeholderItemId = 'editor.placeholder';
|
import 'toolbar_id_enum.dart';
|
||||||
const paddingPlaceholderItemId = 'editor.padding_placeholder';
|
|
||||||
|
|
||||||
final ToolbarItem customPlaceholderItem = ToolbarItem(
|
final ToolbarItem customPlaceholderItem = ToolbarItem(
|
||||||
id: placeholderItemId,
|
id: ToolbarId.placeholder.id,
|
||||||
group: -1,
|
group: -1,
|
||||||
isActive: (editorState) => true,
|
isActive: (editorState) => true,
|
||||||
builder: (context, __, ___, ____, _____) {
|
builder: (context, __, ___, ____, _____) {
|
||||||
@ -28,7 +27,7 @@ ToolbarItem buildPaddingPlaceholderItem(
|
|||||||
bool Function(EditorState editorState)? isActive,
|
bool Function(EditorState editorState)? isActive,
|
||||||
}) =>
|
}) =>
|
||||||
ToolbarItem(
|
ToolbarItem(
|
||||||
id: paddingPlaceholderItemId,
|
id: ToolbarId.paddingPlaceHolder.id,
|
||||||
group: group,
|
group: group,
|
||||||
isActive: isActive,
|
isActive: isActive,
|
||||||
builder: (context, __, ___, ____, _____) => HSpace(4),
|
builder: (context, __, ___, ____, _____) => HSpace(4),
|
||||||
|
|||||||
@ -6,10 +6,10 @@ import 'package:easy_localization/easy_localization.dart';
|
|||||||
import 'package:flowy_infra_ui/flowy_infra_ui.dart';
|
import 'package:flowy_infra_ui/flowy_infra_ui.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
|
|
||||||
const _kTextAlignItemId = 'editor.text_align';
|
import 'toolbar_id_enum.dart';
|
||||||
|
|
||||||
final ToolbarItem customTextAlignItem = ToolbarItem(
|
final ToolbarItem customTextAlignItem = ToolbarItem(
|
||||||
id: _kTextAlignItemId,
|
id: ToolbarId.textAlign.id,
|
||||||
group: 4,
|
group: 4,
|
||||||
isActive: onlyShowInSingleSelectionAndTextType,
|
isActive: onlyShowInSingleSelectionAndTextType,
|
||||||
builder: (
|
builder: (
|
||||||
@ -114,7 +114,7 @@ class _TextAlignActionListState extends State<TextAlignActionList> {
|
|||||||
|
|
||||||
return widget.tooltipBuilder?.call(
|
return widget.tooltipBuilder?.call(
|
||||||
context,
|
context,
|
||||||
_kTextAlignItemId,
|
ToolbarId.textAlign.id,
|
||||||
LocaleKeys.document_toolbar_textAlign.tr(),
|
LocaleKeys.document_toolbar_textAlign.tr(),
|
||||||
child,
|
child,
|
||||||
) ??
|
) ??
|
||||||
|
|||||||
@ -7,12 +7,12 @@ import 'package:appflowy_editor/appflowy_editor.dart' hide ColorPicker;
|
|||||||
import 'package:easy_localization/easy_localization.dart';
|
import 'package:easy_localization/easy_localization.dart';
|
||||||
import 'package:flowy_infra_ui/flowy_infra_ui.dart';
|
import 'package:flowy_infra_ui/flowy_infra_ui.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
|
import 'toolbar_id_enum.dart';
|
||||||
|
|
||||||
const _kTextColorItemId = 'editor.textColor';
|
|
||||||
String? _customColorHex;
|
String? _customColorHex;
|
||||||
|
|
||||||
final customTextColorItem = ToolbarItem(
|
final customTextColorItem = ToolbarItem(
|
||||||
id: _kTextColorItemId,
|
id: ToolbarId.textColor.id,
|
||||||
group: 1,
|
group: 1,
|
||||||
isActive: showInAnyTextType,
|
isActive: showInAnyTextType,
|
||||||
builder: (context, editorState, highlightColor, iconColor, tooltipBuilder) =>
|
builder: (context, editorState, highlightColor, iconColor, tooltipBuilder) =>
|
||||||
@ -106,8 +106,8 @@ class _TextColorPickerWidgetState extends State<TextColorPickerWidget> {
|
|||||||
|
|
||||||
return widget.tooltipBuilder?.call(
|
return widget.tooltipBuilder?.call(
|
||||||
context,
|
context,
|
||||||
_kTextColorItemId,
|
ToolbarId.textColor.id,
|
||||||
AppFlowyEditorL10n.current.textColor,
|
LocaleKeys.document_toolbar_textColor.tr(),
|
||||||
child,
|
child,
|
||||||
) ??
|
) ??
|
||||||
child;
|
child;
|
||||||
|
|||||||
@ -165,8 +165,8 @@ class _MoreOptionActionListState extends State<MoreOptionActionList> {
|
|||||||
rightIcon: FlowyText(
|
rightIcon: FlowyText(
|
||||||
shortcutTooltips(
|
shortcutTooltips(
|
||||||
'⌘⇧S',
|
'⌘⇧S',
|
||||||
'CTRL+SHIFT+S',
|
'Ctrl⇧S',
|
||||||
'CTRL+SHIFT+S',
|
'Ctrl⇧S',
|
||||||
).trim(),
|
).trim(),
|
||||||
color: fontColor,
|
color: fontColor,
|
||||||
fontSize: 12,
|
fontSize: 12,
|
||||||
@ -180,8 +180,8 @@ class _MoreOptionActionListState extends State<MoreOptionActionList> {
|
|||||||
rightIcon: FlowyText(
|
rightIcon: FlowyText(
|
||||||
shortcutTooltips(
|
shortcutTooltips(
|
||||||
'⌘⇧E',
|
'⌘⇧E',
|
||||||
'CTRL+SHIFT+E',
|
'Ctrl⇧E',
|
||||||
'CTRL+SHIFT+E',
|
'Ctrl⇧E',
|
||||||
).trim(),
|
).trim(),
|
||||||
color: fontColor,
|
color: fontColor,
|
||||||
fontSize: 12,
|
fontSize: 12,
|
||||||
|
|||||||
@ -8,10 +8,10 @@ import 'package:easy_localization/easy_localization.dart';
|
|||||||
import 'package:flowy_infra_ui/flowy_infra_ui.dart';
|
import 'package:flowy_infra_ui/flowy_infra_ui.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
|
|
||||||
const _kTextHeadingItemId = 'editor.text_heading';
|
import 'toolbar_id_enum.dart';
|
||||||
|
|
||||||
final ToolbarItem customTextHeadingItem = ToolbarItem(
|
final ToolbarItem customTextHeadingItem = ToolbarItem(
|
||||||
id: _kTextHeadingItemId,
|
id: ToolbarId.textHeading.id,
|
||||||
group: 1,
|
group: 1,
|
||||||
isActive: onlyShowInSingleTextTypeSelectionAndExcludeTable,
|
isActive: onlyShowInSingleTextTypeSelectionAndExcludeTable,
|
||||||
builder: (
|
builder: (
|
||||||
@ -109,7 +109,7 @@ class _TextHeadingActionListState extends State<TextHeadingActionList> {
|
|||||||
|
|
||||||
return widget.tooltipBuilder?.call(
|
return widget.tooltipBuilder?.call(
|
||||||
context,
|
context,
|
||||||
_kTextHeadingItemId,
|
ToolbarId.textHeading.id,
|
||||||
LocaleKeys.document_toolbar_textSize.tr(),
|
LocaleKeys.document_toolbar_textSize.tr(),
|
||||||
child,
|
child,
|
||||||
) ??
|
) ??
|
||||||
|
|||||||
@ -14,8 +14,7 @@ import 'package:flowy_infra_ui/style_widget/hover.dart';
|
|||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
|
|
||||||
import 'text_heading_toolbar_item.dart';
|
import 'text_heading_toolbar_item.dart';
|
||||||
|
import 'toolbar_id_enum.dart';
|
||||||
const _kSuggestionsItemId = 'editor.suggestions';
|
|
||||||
|
|
||||||
@visibleForTesting
|
@visibleForTesting
|
||||||
const kSuggestionsItemKey = ValueKey('SuggestionsItem');
|
const kSuggestionsItemKey = ValueKey('SuggestionsItem');
|
||||||
@ -24,7 +23,7 @@ const kSuggestionsItemKey = ValueKey('SuggestionsItem');
|
|||||||
const kSuggestionsItemListKey = ValueKey('SuggestionsItemList');
|
const kSuggestionsItemListKey = ValueKey('SuggestionsItemList');
|
||||||
|
|
||||||
final ToolbarItem suggestionsItem = ToolbarItem(
|
final ToolbarItem suggestionsItem = ToolbarItem(
|
||||||
id: _kSuggestionsItemId,
|
id: ToolbarId.suggestions.id,
|
||||||
group: 3,
|
group: 3,
|
||||||
isActive: enableSuggestions,
|
isActive: enableSuggestions,
|
||||||
builder: (
|
builder: (
|
||||||
@ -159,7 +158,7 @@ class _SuggestionsActionListState extends State<SuggestionsActionList> {
|
|||||||
|
|
||||||
return widget.tooltipBuilder?.call(
|
return widget.tooltipBuilder?.call(
|
||||||
context,
|
context,
|
||||||
_kSuggestionsItemId,
|
ToolbarId.suggestions.id,
|
||||||
currentSuggestionItem.title,
|
currentSuggestionItem.title,
|
||||||
child,
|
child,
|
||||||
) ??
|
) ??
|
||||||
|
|||||||
@ -0,0 +1,19 @@
|
|||||||
|
enum ToolbarId {
|
||||||
|
bold,
|
||||||
|
underline,
|
||||||
|
italic,
|
||||||
|
code,
|
||||||
|
highlightColor,
|
||||||
|
textColor,
|
||||||
|
link,
|
||||||
|
placeholder,
|
||||||
|
paddingPlaceHolder,
|
||||||
|
textAlign,
|
||||||
|
moreOption,
|
||||||
|
textHeading,
|
||||||
|
suggestions,
|
||||||
|
}
|
||||||
|
|
||||||
|
extension ToolbarIdExtension on ToolbarId {
|
||||||
|
String get id => 'editor.$name';
|
||||||
|
}
|
||||||
@ -550,7 +550,7 @@ class EditorStyleCustomizer {
|
|||||||
style: context.tooltipTextStyle(),
|
style: context.tooltipTextStyle(),
|
||||||
),
|
),
|
||||||
TextSpan(
|
TextSpan(
|
||||||
text: (Platform.isMacOS ? '⌘+' : 'Ctrl+\\') + tooltip.$2,
|
text: (Platform.isMacOS ? '⌘+' : 'Ctrl+') + tooltip.$2,
|
||||||
style: context.tooltipTextStyle()?.copyWith(
|
style: context.tooltipTextStyle()?.copyWith(
|
||||||
color: Theme.of(context).hintColor,
|
color: Theme.of(context).hintColor,
|
||||||
),
|
),
|
||||||
|
|||||||
@ -2118,7 +2118,6 @@
|
|||||||
"moreOptions": "More options",
|
"moreOptions": "More options",
|
||||||
"font": "Font",
|
"font": "Font",
|
||||||
"inlineCode": "Inline code",
|
"inlineCode": "Inline code",
|
||||||
|
|
||||||
"suggestions": "Suggestions",
|
"suggestions": "Suggestions",
|
||||||
"turnInto": "Turn into",
|
"turnInto": "Turn into",
|
||||||
"equation": "Equation"
|
"equation": "Equation"
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user