Add ability to copy links for rooms and spaces
This commit is contained in:
parent
11c03733cf
commit
f7c6c3bb6a
8 changed files with 52 additions and 4 deletions
|
|
@ -3,6 +3,7 @@ import "package:nexus/helpers/extensions/get_headers.dart";
|
|||
import "package:nexus/models/full_room.dart";
|
||||
import "package:nexus/widgets/appbar.dart";
|
||||
import "package:nexus/widgets/avatar_or_hash.dart";
|
||||
import "package:nexus/widgets/chat_page/room_menu.dart";
|
||||
|
||||
class RoomAppbar extends StatelessWidget implements PreferredSizeWidget {
|
||||
final bool isDesktop;
|
||||
|
|
@ -48,10 +49,12 @@ class RoomAppbar extends StatelessWidget implements PreferredSizeWidget {
|
|||
],
|
||||
),
|
||||
actions: [
|
||||
IconButton(onPressed: () {}, icon: Icon(Icons.push_pin)),
|
||||
IconButton(
|
||||
onPressed: () => onOpenMemberList(context),
|
||||
icon: Icon(Icons.people),
|
||||
),
|
||||
RoomMenu(room.roomData),
|
||||
],
|
||||
);
|
||||
}
|
||||
|
|
|
|||
33
lib/widgets/chat_page/room_menu.dart
Normal file
33
lib/widgets/chat_page/room_menu.dart
Normal file
|
|
@ -0,0 +1,33 @@
|
|||
import "package:clipboard/clipboard.dart";
|
||||
import "package:flutter/material.dart";
|
||||
import "package:matrix/matrix.dart";
|
||||
|
||||
class RoomMenu extends StatelessWidget {
|
||||
final Room room;
|
||||
const RoomMenu(this.room, {super.key});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
final danger = Theme.of(context).colorScheme.error;
|
||||
|
||||
return PopupMenuButton(
|
||||
itemBuilder: (_) => [
|
||||
PopupMenuItem(
|
||||
onTap: () async {
|
||||
final link = await room.matrixToInviteLink();
|
||||
await FlutterClipboard.copy(link.toString());
|
||||
},
|
||||
child: ListTile(leading: Icon(Icons.link), title: Text("Copy Link")),
|
||||
),
|
||||
PopupMenuItem(
|
||||
onTap: () =>
|
||||
showDialog(context: context, builder: (context) => AlertDialog()),
|
||||
child: ListTile(
|
||||
leading: Icon(Icons.logout, color: danger),
|
||||
title: Text("Leave", style: TextStyle(color: danger)),
|
||||
),
|
||||
),
|
||||
],
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
@ -9,6 +9,7 @@ import "package:nexus/helpers/extensions/better_when.dart";
|
|||
import "package:nexus/helpers/extensions/get_headers.dart";
|
||||
import "package:nexus/pages/settings_page.dart";
|
||||
import "package:nexus/widgets/avatar_or_hash.dart";
|
||||
import "package:nexus/widgets/chat_page/room_menu.dart";
|
||||
|
||||
class Sidebar extends HookConsumerWidget {
|
||||
const Sidebar({super.key});
|
||||
|
|
@ -116,6 +117,9 @@ class Sidebar extends HookConsumerWidget {
|
|||
overflow: TextOverflow.ellipsis,
|
||||
),
|
||||
backgroundColor: Colors.transparent,
|
||||
actions: [
|
||||
if (space.roomData != null) RoomMenu(space.roomData!),
|
||||
],
|
||||
),
|
||||
body: NavigationRail(
|
||||
scrollable: true,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue