From ee648ab105624dfa9a671ad040158f16b918fd8e Mon Sep 17 00:00:00 2001 From: Henry-Hiles Date: Mon, 6 Apr 2026 10:17:04 -0400 Subject: [PATCH] add ability to copy room/space link --- README.md | 5 ++++- lib/widgets/chat_page/room_menu.dart | 21 ++++++++++++++------- 2 files changed, 18 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index fda0e4e..3f49f5b 100644 --- a/README.md +++ b/README.md @@ -100,7 +100,10 @@ A simple and user-friendly Matrix client made with Flutter and a Gomuks backend. - [ ] Threads - [x] Profile popouts - [ ] Working actions -- [ ] Copy link to [room, space, message] +- [ ] Copy link to: + - [x] Room + - [x] Space + - [ ] Message - [ ] Reporting - [x] Events - [ ] Rooms diff --git a/lib/widgets/chat_page/room_menu.dart b/lib/widgets/chat_page/room_menu.dart index 2687bc8..382e20f 100644 --- a/lib/widgets/chat_page/room_menu.dart +++ b/lib/widgets/chat_page/room_menu.dart @@ -1,7 +1,9 @@ import "package:fast_immutable_collections/fast_immutable_collections.dart"; import "package:flutter/material.dart"; +import "package:flutter/services.dart"; import "package:flutter_riverpod/flutter_riverpod.dart"; import "package:nexus/controllers/client_controller.dart"; +import "package:nexus/controllers/via_controller.dart"; import "package:nexus/models/room.dart"; class RoomMenu extends ConsumerWidget { @@ -16,13 +18,18 @@ class RoomMenu extends ConsumerWidget { return PopupMenuButton( itemBuilder: (_) => [ - // PopupMenuItem( - // onTap: () async { - // final link = await room.matrixToInviteLink(); - // await Clipboard.setData(ClipboardData(text: link.toString())); - // }, - // child: ListTile(leading: Icon(Icons.link), title: Text("Copy Link")), - // ), + PopupMenuItem( + onTap: () async { + final vias = ref.watch(ViaController.provider(room)); + + await Clipboard.setData( + ClipboardData( + text: "matrix:roomid/${room.metadata?.id.substring(1)}$vias)", + ), + ); + }, + child: ListTile(leading: Icon(Icons.link), title: Text("Copy Link")), + ), PopupMenuItem( onTap: () async { await client.markRead(room);