load old messages
This commit is contained in:
parent
0bb3961cd2
commit
de561e0b95
10 changed files with 130 additions and 73 deletions
|
|
@ -24,7 +24,12 @@ import "package:flutter_widget_from_html_core/flutter_widget_from_html_core.dart
|
|||
|
||||
class RoomChat extends HookConsumerWidget {
|
||||
final bool isDesktop;
|
||||
const RoomChat({required this.isDesktop, super.key});
|
||||
final bool showMembersByDefault;
|
||||
const RoomChat({
|
||||
required this.isDesktop,
|
||||
required this.showMembersByDefault,
|
||||
super.key,
|
||||
});
|
||||
|
||||
void showContextMenu({
|
||||
required BuildContext context,
|
||||
|
|
@ -48,8 +53,7 @@ class RoomChat extends HookConsumerWidget {
|
|||
@override
|
||||
Widget build(BuildContext context, WidgetRef ref) {
|
||||
final replyToMessage = useState<Message?>(null);
|
||||
final memberListOpened = useState<bool>(isDesktop);
|
||||
final urlRegex = RegExp(r"https?://[^\s\]\(\)]+");
|
||||
final memberListOpened = useState<bool>(showMembersByDefault);
|
||||
final theme = Theme.of(context);
|
||||
return ref
|
||||
.watch(CurrentRoomController.provider)
|
||||
|
|
@ -105,14 +109,13 @@ class RoomChat extends HookConsumerWidget {
|
|||
onTap: () => replyToMessage.value = message,
|
||||
),
|
||||
builders: Builders(
|
||||
chatAnimatedListBuilder: (context, itemBuilder) {
|
||||
return ChatAnimatedList(
|
||||
itemBuilder: itemBuilder,
|
||||
onEndReached: ref
|
||||
.watch(controllerProvider.notifier)
|
||||
.loadOlder,
|
||||
);
|
||||
},
|
||||
chatAnimatedListBuilder: (_, itemBuilder) =>
|
||||
ChatAnimatedList(
|
||||
itemBuilder: itemBuilder,
|
||||
onEndReached: ref
|
||||
.watch(controllerProvider.notifier)
|
||||
.loadOlder,
|
||||
),
|
||||
composerBuilder: (_) => ChatBox(
|
||||
replyToMessage: replyToMessage.value,
|
||||
onDismiss: () => replyToMessage.value = null,
|
||||
|
|
@ -133,14 +136,20 @@ class RoomChat extends HookConsumerWidget {
|
|||
return SizedBox.shrink();
|
||||
}
|
||||
if (element.localName == "code") {
|
||||
return SizedBox(
|
||||
width: 400,
|
||||
child: CodeField(
|
||||
name: element.className
|
||||
.replaceAll("language-", ""),
|
||||
codes: element.text,
|
||||
),
|
||||
);
|
||||
if (element.parent?.localName ==
|
||||
"pre") {
|
||||
return SizedBox(
|
||||
width: 400,
|
||||
child: CodeField(
|
||||
name: element.className
|
||||
.replaceAll(
|
||||
"language-",
|
||||
"",
|
||||
),
|
||||
codes: element.text,
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
if (element.localName == "img") {
|
||||
final src = Uri.tryParse(
|
||||
|
|
@ -204,11 +213,7 @@ class RoomChat extends HookConsumerWidget {
|
|||
),
|
||||
linkPreviewBuilder: (_, message, isSentByMe) =>
|
||||
LinkPreview(
|
||||
text:
|
||||
urlRegex
|
||||
.firstMatch(message.text)
|
||||
?.group(0) ??
|
||||
"",
|
||||
text: message.text,
|
||||
backgroundColor: isSentByMe
|
||||
? theme.colorScheme.inversePrimary
|
||||
: theme.colorScheme.surfaceContainerLow,
|
||||
|
|
@ -306,11 +311,13 @@ class RoomChat extends HookConsumerWidget {
|
|||
),
|
||||
),
|
||||
|
||||
if (memberListOpened.value == true && isDesktop)
|
||||
if (memberListOpened.value == true && showMembersByDefault)
|
||||
MemberList(room.roomData),
|
||||
],
|
||||
),
|
||||
endDrawer: isDesktop ? null : MemberList(room.roomData),
|
||||
endDrawer: showMembersByDefault
|
||||
? null
|
||||
: MemberList(room.roomData),
|
||||
);
|
||||
},
|
||||
);
|
||||
|
|
|
|||
|
|
@ -1,5 +1,4 @@
|
|||
import "dart:math";
|
||||
|
||||
import "package:flutter/material.dart";
|
||||
import "package:flutter_chat_core/flutter_chat_core.dart";
|
||||
import "package:flutter_chat_ui/flutter_chat_ui.dart";
|
||||
|
|
@ -29,13 +28,18 @@ class TopWidget extends ConsumerWidget {
|
|||
loading: SizedBox.shrink,
|
||||
data: (replyMessage) {
|
||||
if (replyMessage == null) return SizedBox.shrink();
|
||||
|
||||
// Black magic to limit reply preview length
|
||||
final replyText = message is TextMessage
|
||||
? replyMessage.text.substring(
|
||||
0,
|
||||
min(
|
||||
max(
|
||||
min(
|
||||
(message as TextMessage).text.length - 20,
|
||||
max(
|
||||
(message as TextMessage).text.length - 20,
|
||||
message.metadata?["displayName"].length,
|
||||
),
|
||||
replyMessage.text.length,
|
||||
),
|
||||
5,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue