Add reporting functionality
This commit is contained in:
parent
3ab8451a64
commit
cd61509f75
4 changed files with 82 additions and 2 deletions
|
|
@ -79,7 +79,7 @@ A simple and user-friendly Matrix client made with Flutter and the Matrix Dart S
|
||||||
- [ ] Threads
|
- [ ] Threads
|
||||||
- [ ] Profile popouts
|
- [ ] Profile popouts
|
||||||
- [x] Copy link to [room, space]
|
- [x] Copy link to [room, space]
|
||||||
- [ ] Reporting
|
- [x] Reporting
|
||||||
- [ ] Notifications using UnifiedPush
|
- [ ] Notifications using UnifiedPush
|
||||||
- [ ] Group calls using [MSC4195](https://github.com/matrix-org/matrix-spec-proposals/pull/4195)
|
- [ ] Group calls using [MSC4195](https://github.com/matrix-org/matrix-spec-proposals/pull/4195)
|
||||||
- [ ] Invites
|
- [ ] Invites
|
||||||
|
|
|
||||||
|
|
@ -54,7 +54,7 @@ class ChatBox extends HookConsumerWidget {
|
||||||
|
|
||||||
return KeyEventResult.ignored;
|
return KeyEventResult.ignored;
|
||||||
},
|
},
|
||||||
);
|
)..requestFocus();
|
||||||
|
|
||||||
final style = TextStyle(
|
final style = TextStyle(
|
||||||
color: theme.colorScheme.primary,
|
color: theme.colorScheme.primary,
|
||||||
|
|
|
||||||
|
|
@ -35,6 +35,7 @@ class RoomChat extends HookConsumerWidget {
|
||||||
final replyToMessage = useState<Message?>(null);
|
final replyToMessage = useState<Message?>(null);
|
||||||
final memberListOpened = useState<bool>(showMembersByDefault);
|
final memberListOpened = useState<bool>(showMembersByDefault);
|
||||||
final theme = Theme.of(context);
|
final theme = Theme.of(context);
|
||||||
|
final danger = theme.colorScheme.error;
|
||||||
|
|
||||||
return ref
|
return ref
|
||||||
.watch(SelectedRoomController.provider)
|
.watch(SelectedRoomController.provider)
|
||||||
|
|
@ -120,6 +121,37 @@ class RoomChat extends HookConsumerWidget {
|
||||||
title: Text("Delete"),
|
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(
|
return Scaffold(
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,8 @@
|
||||||
import "package:clipboard/clipboard.dart";
|
import "package:clipboard/clipboard.dart";
|
||||||
import "package:flutter/material.dart";
|
import "package:flutter/material.dart";
|
||||||
|
import "package:flutter_hooks/flutter_hooks.dart";
|
||||||
import "package:matrix/matrix.dart";
|
import "package:matrix/matrix.dart";
|
||||||
|
import "package:nexus/widgets/form_text_input.dart";
|
||||||
|
|
||||||
class RoomMenu extends StatelessWidget {
|
class RoomMenu extends StatelessWidget {
|
||||||
final Room room;
|
final Room room;
|
||||||
|
|
@ -51,6 +53,52 @@ class RoomMenu extends StatelessWidget {
|
||||||
title: Text("Leave", style: TextStyle(color: danger)),
|
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)),
|
||||||
|
),
|
||||||
|
),
|
||||||
],
|
],
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue