class ReportMessageHandler {
List<FlagReason> _flagReasons = [];
// Load flag reasons (call this on app init or when needed)
Future<List<FlagReason>> loadFlagReasons() async {
final completer = Completer<List<FlagReason>>();
CometChat.getFlagReasons(
onSuccess: (List<FlagReason> reasons) {
_flagReasons = reasons;
completer.complete(reasons);
},
onError: (CometChatException e) {
print("Failed to load flag reasons: ${e.message}");
completer.complete([]);
},
);
return completer.future;
}
// Get reasons for UI display
List<FlagReason> getReasons() => _flagReasons;
// Flag a message with selected reason
Future<bool> flagMessage(
int messageId,
String reasonId, {
String? remark,
}) async {
final completer = Completer<bool>();
FlagDetail flagDetail = FlagDetail()
..reasonId = reasonId;
if (remark != null) {
flagDetail.remark = remark;
}
CometChat.flagMessage(
messageId,
flagDetail,
onSuccess: (String response) {
print("Message flagged successfully");
completer.complete(true);
},
onError: (CometChatException e) {
print("Failed to flag message: ${e.message}");
completer.complete(false);
},
);
return completer.future;
}
}
// Usage
final reportHandler = ReportMessageHandler();
// Load reasons when app initializes
await reportHandler.loadFlagReasons();
// When user submits the report
final success = await reportHandler.flagMessage(
123,
"spam",
remark: "User is sending promotional links",
);
if (success) {
showToast("Message reported successfully");
}