From d4b7ec28d82483370ff499f8a081affff28dc415 Mon Sep 17 00:00:00 2001 From: root Date: Sun, 3 May 2026 14:27:32 +0000 Subject: [PATCH 1/6] =?UTF-8?q?=E5=9C=A8=E6=92=B0=E5=86=99=E6=96=87?= =?UTF-8?q?=E7=AB=A0/=E5=B8=96=E5=AD=90=E6=97=B6=E5=8F=AF=E4=BB=A5?= =?UTF-8?q?=E6=96=B9=E4=BE=BF=E7=9A=84=E4=BD=BF=E7=94=A8=E8=B4=B4=E7=BA=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../widgets/compose/compose_toolbar.dart | 41 ++++++++++++++++++- 1 file changed, 39 insertions(+), 2 deletions(-) diff --git a/lib/posts/widgets/compose/compose_toolbar.dart b/lib/posts/widgets/compose/compose_toolbar.dart index 95f39d75f..9a24f17bb 100644 --- a/lib/posts/widgets/compose/compose_toolbar.dart +++ b/lib/posts/widgets/compose/compose_toolbar.dart @@ -10,6 +10,8 @@ import 'package:island/posts/widgets/compose/draft_manager.dart'; import 'package:material_symbols_icons/symbols.dart'; import 'package:styled_widget/styled_widget.dart'; import 'package:solar_network_sdk/solar_network_sdk.dart'; +import 'package:island/stickers/widgets/stickers/sticker_picker.dart'; +import 'package:flutter_popup_card/flutter_popup_cars.dart'; class ComposeToolbar extends HookConsumerWidget { final ComposeState state; @@ -105,6 +107,32 @@ class ComposeToolbar extends HookConsumerWidget { ); } + void pickSticker() async { + final renderBox = context.findRenderObject() as RenderBox?; + final offset = renderBox?.localToGlobal(Offset.zero) ?? Offset.zero; + await showStickerPickerPopover( + context, + offset, + alignment: Alignment.bottomCenter, + onPick: (placeholder) { + final controller = state.contentController; + final text = controller.text; + final selection = controller.selection + final newText = text.replaceRange( + selection.start, + selection.end, + '$placeholder', + ); + controller.text = newText; + controller.selection = TextSelection.fromPosition( + TextPosition(offset: selection.start + placeholder.length + 2), + ); + HapticFeedback.selectionClick(); + }, + ); +} + + void showDraftManager() { showModalBottomSheet( context: context, @@ -123,7 +151,7 @@ class ComposeToolbar extends HookConsumerWidget { state.visibility.value = draft.visibility; state.attachments.value = draft.attachments .map((e) => UniversalFile.fromAttachment(e)) - .toList(); + i.toList(); } }, ), @@ -142,6 +170,7 @@ class ComposeToolbar extends HookConsumerWidget { return Material( elevation: 8, color: Theme.of(context).colorScheme.surfaceContainer, + child: Center( child: ConstrainedBox( constraints: const BoxConstraints(maxWidth: 560), @@ -239,7 +268,15 @@ class ComposeToolbar extends HookConsumerWidget { }, ), // Embed button with visual state when embed is present - ListenableBuilder( + + IconButton() + onPressed: pickSticker + icon:const + Icon(Symbols.sticky_note_2) + Symbols.sticky_note_2 + tooltip: 'stickers'.tr() + color: colorShame.primary, + ListenableBuilder listenable: state.embedView, builder: (context, _) { return IconButton( From 4f39e02581b459c00fc8edf21bb4f41f7e8b7502 Mon Sep 17 00:00:00 2001 From: root Date: Mon, 4 May 2026 08:57:19 +0000 Subject: [PATCH 2/6] =?UTF-8?q?=E4=BF=AE=E5=A4=8Dflutter=20analyze?= =?UTF-8?q?=E6=8C=87=E5=87=BA=E4=B9=8B=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/posts/widgets/compose/compose_toolbar.dart | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/lib/posts/widgets/compose/compose_toolbar.dart b/lib/posts/widgets/compose/compose_toolbar.dart index 9a24f17bb..0fb3bb795 100644 --- a/lib/posts/widgets/compose/compose_toolbar.dart +++ b/lib/posts/widgets/compose/compose_toolbar.dart @@ -11,7 +11,8 @@ import 'package:material_symbols_icons/symbols.dart'; import 'package:styled_widget/styled_widget.dart'; import 'package:solar_network_sdk/solar_network_sdk.dart'; import 'package:island/stickers/widgets/stickers/sticker_picker.dart'; -import 'package:flutter_popup_card/flutter_popup_cars.dart'; +import 'package:flutter_popup_card/flutter_popup_cads.dart'; +import 'package:flutter/services.dart'; class ComposeToolbar extends HookConsumerWidget { final ComposeState state; @@ -151,7 +152,7 @@ class ComposeToolbar extends HookConsumerWidget { state.visibility.value = draft.visibility; state.attachments.value = draft.attachments .map((e) => UniversalFile.fromAttachment(e)) - i.toList(); + .toList(); } }, ), From 778b2aa49629a11e77b8714924e2412f5324ea80 Mon Sep 17 00:00:00 2001 From: root Date: Mon, 4 May 2026 09:07:56 +0000 Subject: [PATCH 3/6] =?UTF-8?q?=E5=8F=88=E6=94=B9=E6=AD=A3flutter=20analyz?= =?UTF-8?q?e=E6=8C=87=E5=87=BA=E4=B9=8B=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/posts/widgets/compose/compose_toolbar.dart | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/lib/posts/widgets/compose/compose_toolbar.dart b/lib/posts/widgets/compose/compose_toolbar.dart index 0fb3bb795..848e719fe 100644 --- a/lib/posts/widgets/compose/compose_toolbar.dart +++ b/lib/posts/widgets/compose/compose_toolbar.dart @@ -11,7 +11,7 @@ import 'package:material_symbols_icons/symbols.dart'; import 'package:styled_widget/styled_widget.dart'; import 'package:solar_network_sdk/solar_network_sdk.dart'; import 'package:island/stickers/widgets/stickers/sticker_picker.dart'; -import 'package:flutter_popup_card/flutter_popup_cads.dart'; +import 'package:flutter_popup_card/flutter_popup_card.dart'; import 'package:flutter/services.dart'; class ComposeToolbar extends HookConsumerWidget { @@ -271,12 +271,13 @@ class ComposeToolbar extends HookConsumerWidget { // Embed button with visual state when embed is present IconButton() - onPressed: pickSticker + onPressed: pickSticker, icon:const - Icon(Symbols.sticky_note_2) + Icon(Symbols.sticky_note_2), Symbols.sticky_note_2 - tooltip: 'stickers'.tr() + tooltip: 'stickers'.tr(), color: colorShame.primary, + ), ListenableBuilder listenable: state.embedView, builder: (context, _) { From b81f245c6e7e8b44c6c9876162caa9a447b1a154 Mon Sep 17 00:00:00 2001 From: root Date: Mon, 4 May 2026 09:23:29 +0000 Subject: [PATCH 4/6] =?UTF-8?q?=E5=A5=BD=E4=BA=86=E6=B2=A1=EF=BC=8C?= =?UTF-8?q?=E8=BF=99=E4=B8=AAflutter=20analyze=E6=80=8E=E4=B9=88=E9=82=A3?= =?UTF-8?q?=E4=B9=88=E9=9A=BE=E8=BF=87=E5=95=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/posts/widgets/compose/compose_toolbar.dart | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/lib/posts/widgets/compose/compose_toolbar.dart b/lib/posts/widgets/compose/compose_toolbar.dart index 848e719fe..54b11377e 100644 --- a/lib/posts/widgets/compose/compose_toolbar.dart +++ b/lib/posts/widgets/compose/compose_toolbar.dart @@ -270,14 +270,13 @@ class ComposeToolbar extends HookConsumerWidget { ), // Embed button with visual state when embed is present - IconButton() - onPressed: pickSticker, - icon:const - Icon(Symbols.sticky_note_2), - Symbols.sticky_note_2 - tooltip: 'stickers'.tr(), - color: colorShame.primary, - ), + IconButton( + onPressed: pickSticker, + icon: const Icon(Symbols.sticky_note_2), + tooltip: 'stickers'.tr(), + color: colorScheme.primary, + ), + ListenableBuilder( ListenableBuilder listenable: state.embedView, builder: (context, _) { From f4b66c6db58f4d28e165e4ed9bfda8e5f3adc03c Mon Sep 17 00:00:00 2001 From: root Date: Mon, 4 May 2026 14:12:38 +0000 Subject: [PATCH 5/6] =?UTF-8?q?=E5=9C=A8=E5=87=BA=E7=A7=9F=E8=BD=A6?= =?UTF-8?q?=E4=B8=8A=E6=94=B9=E4=B8=9C=E8=A5=BF=EF=BC=8C=E6=88=91=E7=AE=97?= =?UTF-8?q?=E6=98=AF=E6=B4=BB=E5=88=B0=E5=A4=B4=E4=BA=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../widgets/compose/compose_toolbar.dart | 25 +++++++++++++------ 1 file changed, 18 insertions(+), 7 deletions(-) diff --git a/lib/posts/widgets/compose/compose_toolbar.dart b/lib/posts/widgets/compose/compose_toolbar.dart index 54b11377e..062a1978c 100644 --- a/lib/posts/widgets/compose/compose_toolbar.dart +++ b/lib/posts/widgets/compose/compose_toolbar.dart @@ -11,7 +11,6 @@ import 'package:material_symbols_icons/symbols.dart'; import 'package:styled_widget/styled_widget.dart'; import 'package:solar_network_sdk/solar_network_sdk.dart'; import 'package:island/stickers/widgets/stickers/sticker_picker.dart'; -import 'package:flutter_popup_card/flutter_popup_card.dart'; import 'package:flutter/services.dart'; class ComposeToolbar extends HookConsumerWidget { @@ -278,12 +277,24 @@ class ComposeToolbar extends HookConsumerWidget { ), ListenableBuilder( ListenableBuilder - listenable: state.embedView, - builder: (context, _) { - return IconButton( - onPressed: showEmbedSheet, - icon: const Icon(Symbols.iframe), - tooltip: 'embedView'.tr(), + ListenableBuilder( + listenable: state.embedView, + builder: (context, _) { + return IconButton( + onPressed: showEmbedSheet, + icon: const Icon(Symbols.iframe), + tooltip: 'embedView'.tr(), + color: colorScheme.primary, + style: ButtonStyle( + backgroundColor: WidgetStatePropertyAll( + state.embedView.value != null + ? colorScheme.primary.withOpacity(0.15) + : null, + ), + ), + ); + }, + ), color: colorScheme.primary, style: ButtonStyle( backgroundColor: WidgetStatePropertyAll( From dc357ad85fcc06d05ffcaa13e633660a3854db48 Mon Sep 17 00:00:00 2001 From: root Date: Mon, 4 May 2026 14:17:47 +0000 Subject: [PATCH 6/6] =?UTF-8?q?=E5=9C=A8=E5=87=BA=E7=A7=9F=E8=BD=A6?= =?UTF-8?q?=E4=B8=8A=E6=94=B9=E4=B8=9C=E8=A5=BF=EF=BC=8C=E6=88=91=E7=AE=97?= =?UTF-8?q?=E6=98=AF=E6=B4=BB=E5=88=B0=E5=A4=B4=E4=BA=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/posts/widgets/compose/compose_toolbar.dart | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/lib/posts/widgets/compose/compose_toolbar.dart b/lib/posts/widgets/compose/compose_toolbar.dart index 062a1978c..82d78efde 100644 --- a/lib/posts/widgets/compose/compose_toolbar.dart +++ b/lib/posts/widgets/compose/compose_toolbar.dart @@ -275,8 +275,7 @@ class ComposeToolbar extends HookConsumerWidget { tooltip: 'stickers'.tr(), color: colorScheme.primary, ), - ListenableBuilder( - ListenableBuilder + ListenableBuilder( listenable: state.embedView, builder: (context, _) {