Add reporting functionality

This commit is contained in:
Henry Hiles 2025-12-26 17:56:21 -05:00
commit cd61509f75
No known key found for this signature in database
4 changed files with 82 additions and 2 deletions

View file

@ -54,7 +54,7 @@ class ChatBox extends HookConsumerWidget {
return KeyEventResult.ignored;
},
);
)..requestFocus();
final style = TextStyle(
color: theme.colorScheme.primary,

View file

@ -35,6 +35,7 @@ class RoomChat extends HookConsumerWidget {
final replyToMessage = useState<Message?>(null);
final memberListOpened = useState<bool>(showMembersByDefault);
final theme = Theme.of(context);
final danger = theme.colorScheme.error;
return ref
.watch(SelectedRoomController.provider)
@ -120,6 +121,37 @@ class RoomChat extends HookConsumerWidget {
title: Text("Delete"),
),
),
PopupMenuItem(
onTap: () => showDialog(
context: context,
builder: (context) => AlertDialog(
title: Text("Report"),
content: Text(
"Report this message to your server administrators, who can take action like banning that user or blocking that server from federating.",
),
actions: [
TextButton(
onPressed: Navigator.of(context).pop,
child: Text("Cancel"),
),
TextButton(
onPressed: () {
room.roomData.client.reportEvent(
room.roomData.id,
message.id,
);
Navigator.of(context).pop();
},
child: Text("Report"),
),
],
),
),
child: ListTile(
leading: Icon(Icons.report, color: danger),
title: Text("Report", style: TextStyle(color: danger)),
),
),
];
return Scaffold(

View file

@ -1,6 +1,8 @@
import "package:clipboard/clipboard.dart";
import "package:flutter/material.dart";
import "package:flutter_hooks/flutter_hooks.dart";
import "package:matrix/matrix.dart";
import "package:nexus/widgets/form_text_input.dart";
class RoomMenu extends StatelessWidget {
final Room room;
@ -51,6 +53,52 @@ class RoomMenu extends StatelessWidget {
title: Text("Leave", style: TextStyle(color: danger)),
),
),
PopupMenuItem(
onTap: () => showDialog(
context: context,
builder: (context) => HookBuilder(
builder: (_) {
final reasonController = useTextEditingController();
return AlertDialog(
title: Text("Report"),
content: Column(
mainAxisSize: MainAxisSize.min,
children: [
Text(
"Report this room to your server administrators, who can take action like banning this room.",
),
SizedBox(height: 12),
FormTextInput(
required: false,
capitalize: true,
controller: reasonController,
title: "Reason for deletion (optional)",
),
],
),
actions: [
TextButton(
onPressed: Navigator.of(context).pop,
child: Text("Cancel"),
),
TextButton(
onPressed: () {
room.client.reportRoom(room.id, reasonController.text);
Navigator.of(context).pop();
},
child: Text("Report"),
),
],
);
},
),
),
child: ListTile(
leading: Icon(Icons.report, color: danger),
title: Text("Report", style: TextStyle(color: danger)),
),
),
],
);
}