do something

This commit is contained in:
OfficialDakari 2025-06-20 22:27:44 +05:00
parent 33d3536660
commit d5fb1cfa13
58 changed files with 386 additions and 7 deletions

View File

@ -20,6 +20,7 @@
"enableGradient": "Enable bubble background gradient",
"translationDisabledInE2e": "Cloud translation is disabled in encrypted rooms to preserve privacy. Select specific words and use system context menu to translate with apps that support it.",
"remove": "Remove",
"@remove": {
"type": "String",
"placeholders": {}
@ -3003,6 +3004,7 @@
}
}
},
"customReaction": "Add reaction",
"canceledKeyVerification": "{sender} canceled key verification",
"@canceledKeyVerification": {
"type": "String",

View File

@ -26,6 +26,7 @@
"displayNavigationRail": "Всегда показывать боковую панель",
"enableGradient": "Фоновый градиент для сообщений",
"translationDisabledInE2e": "Облачные переводы недоступны в зашифрованных комнатах для защиты конфиденциальности. Выбирайте отдельные слова и переводите их через другие приложения.",
"customReaction": "Добавить реакцию",
"@importEmojis": {},
"importFromZipFile": "Импортировать из ZIP-файла",
"@importFromZipFile": {},

View File

@ -78,6 +78,7 @@ abstract class AppConfig {
host: 'servers.joinmatrix.org',
path: 'servers.json',
);
static const Set<String> defaultReactions = {'👍', '❤️', '😂', '😮', '😢'};
static void loadFromJson(Map<String, dynamic> json) {
if (json['chat_color'] != null) {

View File

@ -4095,6 +4095,12 @@ abstract class L10n {
/// **'{sender} accepted key verification'**
String acceptedKeyVerification(String sender);
/// No description provided for @customReaction.
///
/// In en, this message translates to:
/// **'Add reaction'**
String get customReaction;
/// No description provided for @canceledKeyVerification.
///
/// In en, this message translates to:

View File

@ -2254,6 +2254,9 @@ class L10nAr extends L10n {
return 'وافق $sender على التحقق من المفتاح';
}
@override
String get customReaction => 'Add reaction';
@override
String canceledKeyVerification(String sender) {
return 'قام $sender بإلغاء التحقق من المفتاح';

View File

@ -2269,6 +2269,9 @@ class L10nBe extends L10n {
return '$sender accepted key verification';
}
@override
String get customReaction => 'Add reaction';
@override
String canceledKeyVerification(String sender) {
return '$sender canceled key verification';

View File

@ -2269,6 +2269,9 @@ class L10nBn extends L10n {
return '$sender accepted key verification';
}
@override
String get customReaction => 'Add reaction';
@override
String canceledKeyVerification(String sender) {
return '$sender canceled key verification';

View File

@ -2269,6 +2269,9 @@ class L10nBo extends L10n {
return '$sender accepted key verification';
}
@override
String get customReaction => 'Add reaction';
@override
String canceledKeyVerification(String sender) {
return '$sender canceled key verification';

View File

@ -2292,6 +2292,9 @@ class L10nCa extends L10n {
return '$sender ha acceptat la verificació de claus';
}
@override
String get customReaction => 'Add reaction';
@override
String canceledKeyVerification(String sender) {
return '$sender ha canceŀlat la verificació de claus';

View File

@ -2273,6 +2273,9 @@ class L10nCs extends L10n {
return '$sender accepted key verification';
}
@override
String get customReaction => 'Add reaction';
@override
String canceledKeyVerification(String sender) {
return '$sender canceled key verification';

View File

@ -2287,6 +2287,9 @@ class L10nDe extends L10n {
return '$sender hat die Schlüsselverifikation akzeptiert';
}
@override
String get customReaction => 'Add reaction';
@override
String canceledKeyVerification(String sender) {
return '$sender hat die Schlüsselverifikation abgebrochen';

View File

@ -2270,6 +2270,9 @@ class L10nEl extends L10n {
return '$sender accepted key verification';
}
@override
String get customReaction => 'Add reaction';
@override
String canceledKeyVerification(String sender) {
return '$sender canceled key verification';

View File

@ -2269,6 +2269,9 @@ class L10nEn extends L10n {
return '$sender accepted key verification';
}
@override
String get customReaction => 'Add reaction';
@override
String canceledKeyVerification(String sender) {
return '$sender canceled key verification';

View File

@ -2276,6 +2276,9 @@ class L10nEo extends L10n {
return '$sender accepted key verification';
}
@override
String get customReaction => 'Add reaction';
@override
String canceledKeyVerification(String sender) {
return '$sender canceled key verification';

View File

@ -2292,6 +2292,9 @@ class L10nEs extends L10n {
return '$sender aceptó la verificación de clave';
}
@override
String get customReaction => 'Add reaction';
@override
String canceledKeyVerification(String sender) {
return '$sender canceló la verificación de clave';

View File

@ -2286,6 +2286,9 @@ class L10nEt extends L10n {
return '$sender nõustus krüptovõtmete verifitseerimisega';
}
@override
String get customReaction => 'Add reaction';
@override
String canceledKeyVerification(String sender) {
return '$sender katkestas krüptovõtmete verifitseerimise';

View File

@ -2279,6 +2279,9 @@ class L10nEu extends L10n {
return '$sender(e)k gakoaren egiaztapena onartu du';
}
@override
String get customReaction => 'Add reaction';
@override
String canceledKeyVerification(String sender) {
return '$sender(e)k gakoen egiaztapena ezeztatu du';

View File

@ -2272,6 +2272,9 @@ class L10nFa extends L10n {
return '$sender accepted key verification';
}
@override
String get customReaction => 'Add reaction';
@override
String canceledKeyVerification(String sender) {
return '$sender canceled key verification';

View File

@ -2278,6 +2278,9 @@ class L10nFi extends L10n {
return '$sender accepted key verification';
}
@override
String get customReaction => 'Add reaction';
@override
String canceledKeyVerification(String sender) {
return '$sender canceled key verification';

View File

@ -2275,6 +2275,9 @@ class L10nFil extends L10n {
return '$sender accepted key verification';
}
@override
String get customReaction => 'Add reaction';
@override
String canceledKeyVerification(String sender) {
return '$sender canceled key verification';

View File

@ -2312,6 +2312,9 @@ class L10nFr extends L10n {
return '$sender a accepté la vérification de clé';
}
@override
String get customReaction => 'Add reaction';
@override
String canceledKeyVerification(String sender) {
return '$sender a annulé la vérification de clé';

View File

@ -2297,6 +2297,9 @@ class L10nGa extends L10n {
return '$sender glacadh le fíorú eochair';
}
@override
String get customReaction => 'Add reaction';
@override
String canceledKeyVerification(String sender) {
return '$sender cealaithe fíorú eochrach';

View File

@ -2281,6 +2281,9 @@ class L10nGl extends L10n {
return '$sender aceptou a verificación da chave';
}
@override
String get customReaction => 'Add reaction';
@override
String canceledKeyVerification(String sender) {
return '$sender desbotou a verificación da chave';

View File

@ -2264,6 +2264,9 @@ class L10nHe extends L10n {
return '$sender accepted key verification';
}
@override
String get customReaction => 'Add reaction';
@override
String canceledKeyVerification(String sender) {
return '$sender canceled key verification';

View File

@ -2269,6 +2269,9 @@ class L10nHi extends L10n {
return '$sender accepted key verification';
}
@override
String get customReaction => 'Add reaction';
@override
String canceledKeyVerification(String sender) {
return '$sender canceled key verification';

View File

@ -2277,6 +2277,9 @@ class L10nHr extends L10n {
return '$sender je prihvatio/la potvrđivanje ključa';
}
@override
String get customReaction => 'Add reaction';
@override
String canceledKeyVerification(String sender) {
return '$sender je prekinuo/la potvrđivanje ključa';

View File

@ -2279,6 +2279,9 @@ class L10nHu extends L10n {
return '$sender elfogadta a kulcs megerősítést';
}
@override
String get customReaction => 'Add reaction';
@override
String canceledKeyVerification(String sender) {
return '$sender nem fogadta el a kulcs megerősítést';

View File

@ -2269,6 +2269,9 @@ class L10nIa extends L10n {
return '$sender accepted key verification';
}
@override
String get customReaction => 'Add reaction';
@override
String canceledKeyVerification(String sender) {
return '$sender canceled key verification';

View File

@ -2285,6 +2285,9 @@ class L10nId extends L10n {
return '$sender menerima verifikasi kunci';
}
@override
String get customReaction => 'Add reaction';
@override
String canceledKeyVerification(String sender) {
return '$sender membatalkan verifikasi kunci';

View File

@ -2268,6 +2268,9 @@ class L10nIe extends L10n {
return '$sender accepted key verification';
}
@override
String get customReaction => 'Add reaction';
@override
String canceledKeyVerification(String sender) {
return '$sender canceled key verification';

View File

@ -2293,6 +2293,9 @@ class L10nIt extends L10n {
return '$sender ha accettato la verifica della chiave';
}
@override
String get customReaction => 'Add reaction';
@override
String canceledKeyVerification(String sender) {
return '$sender ha annullato la verifica della chiave';

View File

@ -2238,6 +2238,9 @@ class L10nJa extends L10n {
return '$sender accepted key verification';
}
@override
String get customReaction => 'Add reaction';
@override
String canceledKeyVerification(String sender) {
return '$sender canceled key verification';

View File

@ -2271,6 +2271,9 @@ class L10nKa extends L10n {
return '$sender accepted key verification';
}
@override
String get customReaction => 'Add reaction';
@override
String canceledKeyVerification(String sender) {
return '$sender canceled key verification';

View File

@ -2221,6 +2221,9 @@ class L10nKo extends L10n {
return '$sender가 키 검증을 수락함';
}
@override
String get customReaction => 'Add reaction';
@override
String canceledKeyVerification(String sender) {
return '$sender가 키 검증을 취소함';

View File

@ -2275,6 +2275,9 @@ class L10nLt extends L10n {
return '$sender accepted key verification';
}
@override
String get customReaction => 'Add reaction';
@override
String canceledKeyVerification(String sender) {
return '$sender canceled key verification';

View File

@ -2286,6 +2286,9 @@ class L10nLv extends L10n {
return '$sender apstiprināja atslēgas apliecināšanu';
}
@override
String get customReaction => 'Add reaction';
@override
String canceledKeyVerification(String sender) {
return '$sender atcēla atslēgas apliecināšanu';

View File

@ -2272,6 +2272,9 @@ class L10nNb extends L10n {
return '$sender accepted key verification';
}
@override
String get customReaction => 'Add reaction';
@override
String canceledKeyVerification(String sender) {
return '$sender canceled key verification';

View File

@ -2275,6 +2275,9 @@ class L10nNl extends L10n {
return '$sender accepteerde de sleutelverificatie';
}
@override
String get customReaction => 'Add reaction';
@override
String canceledKeyVerification(String sender) {
return '$sender annuleerde de sleutelverificatie';

View File

@ -2284,6 +2284,9 @@ class L10nPl extends L10n {
return '$sender zaakceptował/-a weryfikację kluczy';
}
@override
String get customReaction => 'Add reaction';
@override
String canceledKeyVerification(String sender) {
return '$sender anulował/-a weryfikację kluczy';

View File

@ -2269,6 +2269,9 @@ class L10nPt extends L10n {
return '$sender accepted key verification';
}
@override
String get customReaction => 'Add reaction';
@override
String canceledKeyVerification(String sender) {
return '$sender canceled key verification';

View File

@ -2286,6 +2286,9 @@ class L10nRo extends L10n {
return '$sender accepted key verification';
}
@override
String get customReaction => 'Add reaction';
@override
String canceledKeyVerification(String sender) {
return '$sender canceled key verification';

View File

@ -2274,6 +2274,9 @@ class L10nRu extends L10n {
return '$sender принял(а) подтверждение ключей';
}
@override
String get customReaction => 'Добавить реакцию';
@override
String canceledKeyVerification(String sender) {
return '$sender отклонил(а) подтверждение ключей';

View File

@ -2270,6 +2270,9 @@ class L10nSk extends L10n {
return '$sender accepted key verification';
}
@override
String get customReaction => 'Add reaction';
@override
String canceledKeyVerification(String sender) {
return '$sender canceled key verification';

View File

@ -2273,6 +2273,9 @@ class L10nSl extends L10n {
return '$sender accepted key verification';
}
@override
String get customReaction => 'Add reaction';
@override
String canceledKeyVerification(String sender) {
return '$sender canceled key verification';

View File

@ -2265,6 +2265,9 @@ class L10nSr extends L10n {
return '$sender accepted key verification';
}
@override
String get customReaction => 'Add reaction';
@override
String canceledKeyVerification(String sender) {
return '$sender canceled key verification';

View File

@ -2279,6 +2279,9 @@ class L10nSv extends L10n {
return '$sender accepterade nyckelverifieringen';
}
@override
String get customReaction => 'Add reaction';
@override
String canceledKeyVerification(String sender) {
return '$sender avbröt nyckelverifieringen';

View File

@ -2298,6 +2298,9 @@ class L10nTa extends L10n {
return '$sender ஏற்றுக்கொள்ளப்பட்ட விசை சரிபார்ப்பு';
}
@override
String get customReaction => 'Add reaction';
@override
String canceledKeyVerification(String sender) {
return '$sender ரத்து செய்யப்பட்ட விசை சரிபார்ப்பு';

View File

@ -2269,6 +2269,9 @@ class L10nTe extends L10n {
return '$sender accepted key verification';
}
@override
String get customReaction => 'Add reaction';
@override
String canceledKeyVerification(String sender) {
return '$sender canceled key verification';

View File

@ -2271,6 +2271,9 @@ class L10nTh extends L10n {
return '$sender accepted key verification';
}
@override
String get customReaction => 'Add reaction';
@override
String canceledKeyVerification(String sender) {
return '$sender canceled key verification';

View File

@ -2278,6 +2278,9 @@ class L10nTr extends L10n {
return '$sender anahtar doğrulamayı kabul etti';
}
@override
String get customReaction => 'Add reaction';
@override
String canceledKeyVerification(String sender) {
return '$sender anahtar doğrulamayı iptal etti';

View File

@ -2282,6 +2282,9 @@ class L10nUk extends L10n {
return '$sender погоджується звірити ключі';
}
@override
String get customReaction => 'Add reaction';
@override
String canceledKeyVerification(String sender) {
return '$sender скасовує звірення ключів';

View File

@ -2268,6 +2268,9 @@ class L10nVi extends L10n {
return '$sender accepted key verification';
}
@override
String get customReaction => 'Add reaction';
@override
String canceledKeyVerification(String sender) {
return '$sender canceled key verification';

View File

@ -2195,6 +2195,9 @@ class L10nZh extends L10n {
return '$sender 接受了密钥验证';
}
@override
String get customReaction => 'Add reaction';
@override
String canceledKeyVerification(String sender) {
return '$sender 取消了密钥验证';

View File

@ -131,6 +131,8 @@ class ChatEventList extends StatelessWidget {
resetAnimateIn: () {
controller.animateInEventIndex = null;
},
singleSelected: controller.selectedEvents.length == 1
&& controller.selectedEvents.first.eventId == event.eventId,
onSwipe: () => controller.replyAction(replyTo: event),
onInfoTab: controller.showEventInfo,
onMention: () => controller.sendController.text +=

View File

@ -373,7 +373,7 @@ class ChatView extends StatelessWidget {
: Column(
mainAxisSize: MainAxisSize.min,
children: [
ReactionsPicker(controller),
// ReactionsPicker(controller),
ReplyDisplay(controller),
ChatInputRow(controller),
ChatEmojiPicker(controller),

View File

@ -1,5 +1,7 @@
import 'dart:ui' as ui;
import 'package:emoji_picker_flutter/emoji_picker_flutter.dart';
import 'package:fluffychat/utils/adaptive_bottom_sheet.dart';
import 'package:fluffychat/utils/poll_events.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
@ -42,6 +44,7 @@ class Message extends StatelessWidget {
final ScrollController? scrollController;
final List<Color> colors;
final bool gradient;
final bool singleSelected;
const Message(
this.event, {
@ -50,6 +53,7 @@ class Message extends StatelessWidget {
this.displayReadMarker = false,
this.longPressSelect = false,
this.gradient = false,
this.singleSelected = false,
required this.onSelect,
required this.onInfoTab,
required this.scrollToEventId,
@ -162,6 +166,34 @@ class Message extends StatelessWidget {
final resetAnimateIn = this.resetAnimateIn;
var animateIn = this.animateIn;
final sentReactions = <String>{};
if (singleSelected) {
sentReactions.addAll(
event
.aggregatedEvents(
timeline,
RelationshipTypes.reaction,
)
.where(
(event) =>
event.senderId == event.room.client.userID &&
event.type == 'm.reaction',
)
.map(
(event) => event.content
.tryGetMap<String, Object?>('m.relates_to')
?.tryGet<String>('key'),
)
.whereType<String>(),
);
}
final showReceiptsRow =
event.hasAggregatedEvents(timeline, RelationshipTypes.reaction);
final showReactionPicker =
singleSelected && event.room.canSendDefaultMessages;
final row = StatefulBuilder(
builder: (context, setState) {
if (animateIn && resetAnimateIn != null) {
@ -330,7 +362,9 @@ class Message extends StatelessWidget {
clipBehavior: Clip.antiAlias,
child: BubbleBackground(
colors: colors,
ignore: noBubble || !ownMessage || !gradient,
ignore: noBubble ||
!ownMessage ||
!gradient,
scrollController: scrollController,
child: Container(
decoration: BoxDecoration(
@ -465,6 +499,194 @@ class Message extends StatelessWidget {
),
),
),
Align(
alignment: ownMessage
? Alignment.bottomRight
: Alignment.bottomLeft,
child: AnimatedSize(
duration: FluffyThemes.animationDuration,
curve: FluffyThemes.animationCurve,
child: showReactionPicker
? Padding(
padding: const EdgeInsets.only(
top: 4.0,
bottom: 4.0,
left: 8.0,
),
child: Material(
elevation: 4,
borderRadius: BorderRadius.circular(
AppConfig.borderRadius,
),
shadowColor: theme
.colorScheme.surface
.withAlpha(128),
child: Row(
mainAxisSize: MainAxisSize.min,
children: [
...AppConfig.defaultReactions
.map(
(emoji) => IconButton(
padding: EdgeInsets.zero,
icon: Center(
child: Opacity(
opacity: sentReactions
.contains(
emoji,
)
? 0.33
: 1,
child: Text(
emoji,
style:
const TextStyle(
fontSize: 20,
),
textAlign:
TextAlign.center,
),
),
),
onPressed:
sentReactions.contains(
emoji,
)
? null
: () {
onSelect(
event,
);
event.room
.sendReaction(
event.eventId,
emoji,
);
},
),
),
IconButton(
icon: const Icon(
Icons.add_reaction_outlined,
),
tooltip: L10n.of(
context,
).customReaction,
onPressed: () async {
final emoji =
await showAdaptiveBottomSheet<
String>(
context: context,
builder: (context) =>
Scaffold(
appBar: AppBar(
title: Text(
L10n.of(context)
.customReaction,
),
leading: CloseButton(
onPressed: () =>
Navigator.of(
context,
).pop(
null,
),
),
),
body: SizedBox(
height:
double.infinity,
child: EmojiPicker(
onEmojiSelected: (
_,
emoji,
) =>
Navigator.of(
context,
).pop(
emoji.emoji,
),
config: Config(
emojiViewConfig:
const EmojiViewConfig(
backgroundColor:
Colors
.transparent,
),
bottomActionBarConfig:
const BottomActionBarConfig(
enabled: false,
),
categoryViewConfig:
CategoryViewConfig(
initCategory:
Category
.SMILEYS,
backspaceColor: theme
.colorScheme
.primary,
iconColor: theme
.colorScheme
.primary
.withAlpha(
128,
),
iconColorSelected:
theme
.colorScheme
.primary,
indicatorColor: theme
.colorScheme
.primary,
backgroundColor:
theme
.colorScheme
.surface,
),
skinToneConfig:
SkinToneConfig(
dialogBackgroundColor:
Color.lerp(
theme
.colorScheme
.surface,
theme
.colorScheme
.primaryContainer,
0.75,
)!,
indicatorColor: theme
.colorScheme
.onSurface,
),
),
),
),
),
);
if (emoji == null) {
return;
}
if (sentReactions.contains(
emoji,
)) {
return;
}
onSelect(event);
await event.room
.sendReaction(
event.eventId,
emoji,
);
},
),
],
),
),
)
: const SizedBox.shrink(),
),
),
],
),
),
@ -476,8 +698,6 @@ class Message extends StatelessWidget {
},
);
Widget container;
final showReceiptsRow =
event.hasAggregatedEvents(timeline, RelationshipTypes.reaction);
if (showReceiptsRow || displayTime || selected || displayReadMarker) {
container = Column(
mainAxisSize: MainAxisSize.min,

View File

@ -1170,10 +1170,10 @@ packages:
dependency: "direct main"
description:
name: matrix
sha256: "127cc89a030e1555fc02c3434f443feca942320af6248122b36c56448e59fb19"
sha256: "996e3b1560959afaa3118ec2b5a06734ad29acf64f9c3c09a605c3ddef22039f"
url: "https://pub.dev"
source: hosted
version: "1.0.0"
version: "1.0.1"
meta:
dependency: transitive
description:

View File

@ -63,7 +63,7 @@ dependencies:
latlong2: ^0.9.1
linkify: ^5.0.0
material: ^1.0.0+2
matrix: ^1.0.0
matrix: ^1.0.1
mime: ^1.0.6
native_imaging: ^0.2.0
opus_caf_converter_dart: ^1.0.1