Skip to content

Commit 1142b22

Browse files
committed
fix: icon and emoji doesn't align in mention page menu
1 parent f8a17da commit 1142b22

File tree

7 files changed

+33
-24
lines changed

7 files changed

+33
-24
lines changed

frontend/appflowy_flutter/lib/mobile/presentation/inline_actions/mobile_inline_actions_menu_group.dart

+2-2
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,7 @@ class MobileInlineActionsWidget extends StatelessWidget {
102102

103103
@override
104104
Widget build(BuildContext context) {
105-
final hasIcon = item.icon != null;
105+
final hasIcon = item.iconBuilder != null;
106106
return Container(
107107
height: 36,
108108
decoration: BoxDecoration(
@@ -119,7 +119,7 @@ class MobileInlineActionsWidget extends StatelessWidget {
119119
child: Row(
120120
children: [
121121
if (hasIcon) ...[
122-
item.icon!.call(isSelected),
122+
item.iconBuilder!.call(isSelected),
123123
SizedBox(width: 12),
124124
],
125125
Flexible(

frontend/appflowy_flutter/lib/plugins/document/presentation/editor_plugins/header/emoji_icon_widget.dart

+7-9
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import 'package:appflowy/shared/icon_emoji_picker/icon_picker.dart';
88
import 'package:appflowy/user/application/user_service.dart';
99
import 'package:appflowy_backend/log.dart';
1010
import 'package:appflowy_backend/protobuf/flowy-user/user_profile.pb.dart';
11+
import 'package:flowy_infra_ui/style_widget/text.dart';
1112
import 'package:flowy_svg/flowy_svg.dart';
1213
import 'package:flutter/material.dart';
1314
import 'package:string_validator/string_validator.dart';
@@ -113,24 +114,21 @@ class _RawEmojiIconWidgetState extends State<RawEmojiIconWidget> {
113114
try {
114115
switch (widget.emoji.type) {
115116
case FlowyIconType.emoji:
116-
return EmojiText(
117-
emoji: widget.emoji.emoji,
117+
return FlowyText.emoji(
118+
widget.emoji.emoji,
118119
fontSize: widget.emojiSize,
119120
textAlign: TextAlign.justify,
120121
lineHeight: widget.lineHeight,
121122
);
122123
case FlowyIconType.icon:
123-
IconsData iconData =
124-
IconsData.fromJson(jsonDecode(widget.emoji.emoji));
124+
IconsData iconData = IconsData.fromJson(
125+
jsonDecode(widget.emoji.emoji),
126+
);
125127
if (!widget.enableColor) {
126128
iconData = iconData.noColor();
127129
}
128130

129-
/// Under the same width conditions, icons on macOS seem to appear
130-
/// larger than emojis, so 0.9 is used here to slightly reduce the
131-
/// size of the icons
132-
final iconSize =
133-
Platform.isMacOS ? widget.emojiSize * 0.9 : widget.emojiSize;
131+
final iconSize = widget.emojiSize;
134132
return IconWidget(
135133
iconsData: iconData,
136134
size: iconSize,

frontend/appflowy_flutter/lib/plugins/inline_actions/handlers/child_page.dart

+1-1
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ class InlineChildPageService extends InlineActionsDelegate {
2424
results.add(
2525
InlineActionsMenuItem(
2626
label: LocaleKeys.inlineActions_createPage.tr(args: [search]),
27-
icon: (_) => const FlowySvg(FlowySvgs.add_s),
27+
iconBuilder: (_) => const FlowySvg(FlowySvgs.add_s),
2828
onSelected: (context, editorState, service, replacement) =>
2929
_onSelected(context, editorState, service, replacement, search),
3030
),

frontend/appflowy_flutter/lib/plugins/inline_actions/handlers/inline_page_reference.dart

+13-6
Original file line numberDiff line numberDiff line change
@@ -235,12 +235,19 @@ class InlinePageReferenceService extends InlineActionsDelegate {
235235
InlineActionsMenuItem _fromView(ViewPB view) => InlineActionsMenuItem(
236236
keywords: [view.nameOrDefault.toLowerCase()],
237237
label: view.nameOrDefault,
238-
icon: (onSelected) => view.icon.value.isNotEmpty
239-
? RawEmojiIconWidget(
240-
emoji: view.icon.toEmojiIconData(),
241-
emojiSize: 14,
242-
)
243-
: view.defaultIcon(),
238+
iconBuilder: (onSelected) {
239+
final child = view.icon.value.isNotEmpty
240+
? RawEmojiIconWidget(
241+
emoji: view.icon.toEmojiIconData(),
242+
emojiSize: 16.0,
243+
lineHeight: 18.0 / 16.0,
244+
)
245+
: view.defaultIcon(size: const Size(16, 16));
246+
return SizedBox(
247+
width: 16,
248+
child: child,
249+
);
250+
},
244251
onSelected: (context, editorState, menu, replace) => insertPage
245252
? _onInsertPageRef(view, context, editorState, replace)
246253
: _onInsertLinkRef(view, context, editorState, menu, replace),

frontend/appflowy_flutter/lib/plugins/inline_actions/inline_actions_result.dart

+2-2
Original file line numberDiff line numberDiff line change
@@ -12,13 +12,13 @@ typedef SelectItemHandler = void Function(
1212
class InlineActionsMenuItem {
1313
InlineActionsMenuItem({
1414
required this.label,
15-
this.icon,
15+
this.iconBuilder,
1616
this.keywords,
1717
this.onSelected,
1818
});
1919

2020
final String label;
21-
final Widget Function(bool onSelected)? icon;
21+
final Widget Function(bool onSelected)? iconBuilder;
2222
final List<String>? keywords;
2323
final SelectItemHandler? onSelected;
2424
}

frontend/appflowy_flutter/lib/plugins/inline_actions/widgets/inline_actions_menu_group.dart

+3-3
Original file line numberDiff line numberDiff line change
@@ -92,8 +92,8 @@ class InlineActionsWidget extends StatefulWidget {
9292
class _InlineActionsWidgetState extends State<InlineActionsWidget> {
9393
@override
9494
Widget build(BuildContext context) {
95-
final icon = widget.item.icon;
96-
final hasIcon = icon != null;
95+
final iconBuilder = widget.item.iconBuilder;
96+
final hasIcon = iconBuilder != null;
9797
return Padding(
9898
padding: const EdgeInsets.symmetric(vertical: 2),
9999
child: SizedBox(
@@ -104,7 +104,7 @@ class _InlineActionsWidgetState extends State<InlineActionsWidget> {
104104
text: Row(
105105
children: [
106106
if (hasIcon) ...[
107-
icon.call(widget.isSelected),
107+
iconBuilder.call(widget.isSelected),
108108
SizedBox(width: 12),
109109
],
110110
Flexible(

frontend/appflowy_flutter/lib/workspace/presentation/home/menu/view/view_item.dart

+5-1
Original file line numberDiff line numberDiff line change
@@ -632,7 +632,11 @@ class _SingleInnerViewItemState extends State<SingleInnerViewItem> {
632632
Widget _buildViewIconButton() {
633633
final iconData = widget.view.icon.toEmojiIconData();
634634
final icon = iconData.isNotEmpty
635-
? RawEmojiIconWidget(emoji: iconData, emojiSize: 16.0)
635+
? RawEmojiIconWidget(
636+
emoji: iconData,
637+
emojiSize: 16.0,
638+
lineHeight: 18.0 / 16.0,
639+
)
636640
: Opacity(opacity: 0.6, child: widget.view.defaultIcon());
637641

638642
final Widget child = AppFlowyPopover(

0 commit comments

Comments
 (0)