forked from Henry-Hiles/nexus
add minimal scroll to message, only when on current timeline
This commit is contained in:
parent
cb22bdc314
commit
9a3f7e9bdc
4 changed files with 22 additions and 9 deletions
|
|
@ -167,6 +167,11 @@ class ClientController extends AsyncNotifier<int> {
|
|||
await _sendCommand("leave_room", {"room_id": room.metadata!.id});
|
||||
}
|
||||
|
||||
// (await _sendCommand("get_event_context", {
|
||||
// "room_id": request.roomId,
|
||||
// "event_id": r"$OqZT4NuTj0J1-771IOEEWRI4XdumRNu6ighlvO3K3gc",
|
||||
// }));
|
||||
|
||||
Future<IList<Event>> getRoomState(GetRoomStateRequest request) async {
|
||||
final response =
|
||||
(await _sendCommand("get_room_state", request.toJson())) as List;
|
||||
|
|
|
|||
|
|
@ -18,12 +18,12 @@ import "package:nexus/models/relation_type.dart";
|
|||
import "package:nexus/models/requests/send_message_request.dart";
|
||||
import "package:nexus/models/room.dart";
|
||||
|
||||
class RoomChatController extends AsyncNotifier<ChatController> {
|
||||
class RoomChatController extends AsyncNotifier<InMemoryChatController> {
|
||||
final String roomId;
|
||||
RoomChatController(this.roomId);
|
||||
|
||||
@override
|
||||
Future<ChatController> build() async {
|
||||
Future<InMemoryChatController> build() async {
|
||||
final client = ref.watch(ClientController.provider.notifier);
|
||||
var room = ref.read(RoomsController.provider)[roomId];
|
||||
if (room == null) return InMemoryChatController();
|
||||
|
|
@ -283,8 +283,13 @@ class RoomChatController extends AsyncNotifier<ChatController> {
|
|||
);
|
||||
}
|
||||
|
||||
Future<void> scrollToMessage(Message message) async {
|
||||
final controller = await future;
|
||||
return await controller.scrollToMessage(message.id);
|
||||
}
|
||||
|
||||
static final provider = AsyncNotifierProvider.family
|
||||
.autoDispose<RoomChatController, ChatController, String>(
|
||||
.autoDispose<RoomChatController, InMemoryChatController, String>(
|
||||
RoomChatController.new,
|
||||
);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -435,6 +435,7 @@ class RoomChat extends HookConsumerWidget {
|
|||
customWidget: getTextWidget(message),
|
||||
topWidget: TopWidget(
|
||||
message,
|
||||
onTapReply: notifier.scrollToMessage,
|
||||
groupStatus: groupStatus,
|
||||
),
|
||||
message: message,
|
||||
|
|
@ -491,6 +492,8 @@ class RoomChat extends HookConsumerWidget {
|
|||
topWidget: TopWidget(
|
||||
message,
|
||||
groupStatus: groupStatus,
|
||||
onTapReply:
|
||||
notifier.scrollToMessage,
|
||||
alwaysShow: true,
|
||||
),
|
||||
message: textMessage,
|
||||
|
|
@ -503,6 +506,8 @@ class RoomChat extends HookConsumerWidget {
|
|||
: TopWidget(
|
||||
message,
|
||||
groupStatus: groupStatus,
|
||||
onTapReply:
|
||||
notifier.scrollToMessage,
|
||||
alwaysShow: true,
|
||||
),
|
||||
customImageProvider: CachedNetworkImage(
|
||||
|
|
@ -547,6 +552,7 @@ class RoomChat extends HookConsumerWidget {
|
|||
child: FlyerChatFileMessage(
|
||||
topWidget: TopWidget(
|
||||
message,
|
||||
onTapReply: notifier.scrollToMessage,
|
||||
groupStatus: groupStatus,
|
||||
),
|
||||
message: message,
|
||||
|
|
|
|||
|
|
@ -9,9 +9,11 @@ class TopWidget extends ConsumerWidget {
|
|||
final Message message;
|
||||
final bool alwaysShow;
|
||||
final MessageGroupStatus? groupStatus;
|
||||
final void Function(Message message)? onTapReply;
|
||||
const TopWidget(
|
||||
this.message, {
|
||||
required this.groupStatus,
|
||||
this.onTapReply,
|
||||
this.alwaysShow = false,
|
||||
super.key,
|
||||
});
|
||||
|
|
@ -54,12 +56,7 @@ class TopWidget extends ConsumerWidget {
|
|||
return Padding(
|
||||
padding: EdgeInsets.only(bottom: 12),
|
||||
child: InkWell(
|
||||
onTap: () => showDialog(
|
||||
context: context,
|
||||
builder: (_) => Dialog(
|
||||
child: Text("TODO: Scroll to original message"),
|
||||
), // TODO
|
||||
),
|
||||
onTap: () => onTapReply?.call(replyMessage),
|
||||
child: Quoted(
|
||||
Row(
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue