diff --git a/assets/translations/en-US.json b/assets/translations/en-US.json index 89fd949..e72bfff 100644 --- a/assets/translations/en-US.json +++ b/assets/translations/en-US.json @@ -819,5 +819,8 @@ "accountUnconfirmedSubtitle": "Your account is unconfirmed, which will make most features unavailable and your account will be destroyed in 24 hours. You should receive an email in your inbox with a confirmation link.", "accountUnconfirmedUnreceived": "Didn't receive the email?", "accountUnconfirmedResend": "Resend one", - "accountUnconfirmedResendSuccessful": "Email has been resent, you can resend it again in 60 minutes." + "accountUnconfirmedResendSuccessful": "Email has been resent, you can resend it again in 60 minutes.", + "stickerPickerEmpty": "Sticker list is empty", + "stickerPickerEmptyHint": "To start using stickers, you need to add a sticker pack first.", + "goto": "Go to {}" } diff --git a/assets/translations/zh-CN.json b/assets/translations/zh-CN.json index 56cbb20..86baa9c 100644 --- a/assets/translations/zh-CN.json +++ b/assets/translations/zh-CN.json @@ -819,5 +819,8 @@ "accountUnconfirmedSubtitle": "您的账户尚未确认,这会导致大部分功能不可用,并且您的帐户将在 24 小时后自毁。您绑定的邮箱的收件箱应该会有一封邮件指引您确认您的帐户。", "accountUnconfirmedUnreceived": "未收到邮件?", "accountUnconfirmedResend": "重新发送一封", - "accountUnconfirmedResendSuccessful": "邮件已重新发送,你可以在 60 分钟后再重发一封。" + "accountUnconfirmedResendSuccessful": "邮件已重新发送,你可以在 60 分钟后再重发一封。", + "stickerPickerEmpty": "贴图列表为空", + "stickerPickerEmptyHint": "想要开始使用贴图,请先添加贴图包。", + "goto": "跳转到 {}" } diff --git a/assets/translations/zh-HK.json b/assets/translations/zh-HK.json index cbe2629..223fc87 100644 --- a/assets/translations/zh-HK.json +++ b/assets/translations/zh-HK.json @@ -819,5 +819,8 @@ "accountUnconfirmedSubtitle": "您的賬户尚未確認,這會導致大部分功能不可用,並且您的帳户將在 24 小時後自毀。您綁定的郵箱的收件箱應該會有一封郵件指引您確認您的帳户。", "accountUnconfirmedUnreceived": "未收到郵件?", "accountUnconfirmedResend": "重新發送一封", - "accountUnconfirmedResendSuccessful": "郵件已重新發送,你可以在 60 分鐘後再重發一封。" + "accountUnconfirmedResendSuccessful": "郵件已重新發送,你可以在 60 分鐘後再重發一封。", + "stickerPickerEmpty": "貼圖列表為空", + "stickerPickerEmptyHint": "想要開始使用貼圖,請先添加貼圖包。", + "goto": "跳轉到 {}" } diff --git a/assets/translations/zh-TW.json b/assets/translations/zh-TW.json index 7c2a41e..2587bfd 100644 --- a/assets/translations/zh-TW.json +++ b/assets/translations/zh-TW.json @@ -819,5 +819,8 @@ "accountUnconfirmedSubtitle": "您的賬戶尚未確認,這會導致大部分功能不可用,並且您的帳戶將在 24 小時後自毀。您綁定的郵箱的收件箱應該會有一封郵件指引您確認您的帳戶。", "accountUnconfirmedUnreceived": "未收到郵件?", "accountUnconfirmedResend": "重新發送一封", - "accountUnconfirmedResendSuccessful": "郵件已重新發送,你可以在 60 分鐘後再重發一封。" + "accountUnconfirmedResendSuccessful": "郵件已重新發送,你可以在 60 分鐘後再重發一封。", + "stickerPickerEmpty": "貼圖列表為空", + "stickerPickerEmptyHint": "想要開始使用貼圖,請先添加貼圖包。", + "goto": "跳轉到 {}" } diff --git a/lib/widgets/chat/chat_message_input.dart b/lib/widgets/chat/chat_message_input.dart index ffbee59..e6934b7 100644 --- a/lib/widgets/chat/chat_message_input.dart +++ b/lib/widgets/chat/chat_message_input.dart @@ -6,6 +6,7 @@ import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:gap/gap.dart'; +import 'package:go_router/go_router.dart'; import 'package:google_fonts/google_fonts.dart'; import 'package:hotkey_manager/hotkey_manager.dart'; import 'package:material_symbols_icons/symbols.dart'; @@ -445,6 +446,61 @@ class _StickerPicker extends StatelessWidget { @override Widget build(BuildContext context) { final sticker = context.read(); + if (sticker.stickersByPack.isEmpty) { + return GestureDetector( + onTap: () { + onDismiss?.call(); + }, + child: Container( + constraints: BoxConstraints( + maxWidth: min(360, MediaQuery.of(context).size.width - 40), + ), + child: Material( + elevation: 8, + borderRadius: const BorderRadius.all(Radius.circular(8)), + child: ClipRRect( + borderRadius: const BorderRadius.all(Radius.circular(8)), + child: Column( + mainAxisSize: MainAxisSize.min, + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + const Icon(Symbols.ar_stickers, size: 48), + const Gap(8), + Text('stickerPickerEmpty').tr().bold(), + Text( + 'stickerPickerEmptyHint', + textAlign: TextAlign.center, + ).tr().opacity(0.75), + TextButton( + child: Text('goto'.tr(args: ['screenStickers'.tr()])), + onPressed: () { + GoRouter.of(context).goNamed('stickers'); + }, + ), + InkWell( + child: Text( + 'stickersReload', + style: TextStyle( + fontSize: 12, + color: Theme.of(context).colorScheme.primary, + ), + ).tr(), + onTap: () async { + await sticker.listSticker(); + if (!context.mounted) return; + HapticFeedback.heavyImpact(); + context.showSnackbar('stickersReloaded'.tr()); + onDismiss?.call(); + }, + ) + ], + ).padding(all: 64), + ), + ), + ), + ); + } + return GestureDetector( onTap: () { onDismiss?.call();