updated action modal
This commit is contained in:
@@ -9,6 +9,7 @@ import 'package:stream_chat_flutter/src/stream_svg_icon.dart';
|
|||||||
import 'package:stream_chat_flutter/src/theme/themes.dart';
|
import 'package:stream_chat_flutter/src/theme/themes.dart';
|
||||||
import 'package:stream_chat_flutter/src/utils.dart';
|
import 'package:stream_chat_flutter/src/utils.dart';
|
||||||
import 'package:stream_chat_flutter/stream_chat_flutter.dart';
|
import 'package:stream_chat_flutter/stream_chat_flutter.dart';
|
||||||
|
import 'package:stream_chat_flutter_core/stream_chat_flutter_core.dart';
|
||||||
|
|
||||||
/// Constructs a modal with actions for a message
|
/// Constructs a modal with actions for a message
|
||||||
class MessageActionsModal extends StatefulWidget {
|
class MessageActionsModal extends StatefulWidget {
|
||||||
@@ -18,13 +19,17 @@ class MessageActionsModal extends StatefulWidget {
|
|||||||
required this.message,
|
required this.message,
|
||||||
required this.messageWidget,
|
required this.messageWidget,
|
||||||
required this.messageTheme,
|
required this.messageTheme,
|
||||||
|
this.showReactions,
|
||||||
|
this.showDeleteMessage,
|
||||||
|
this.showEditMessage,
|
||||||
this.onReplyTap,
|
this.onReplyTap,
|
||||||
this.onThreadReplyTap,
|
this.onThreadReplyTap,
|
||||||
this.showCopyMessage = true,
|
this.showCopyMessage = true,
|
||||||
this.showReplyMessage = true,
|
this.showReplyMessage = true,
|
||||||
this.showResendMessage = true,
|
this.showResendMessage = true,
|
||||||
this.showThreadReplyMessage = true,
|
this.showThreadReplyMessage,
|
||||||
this.showFlagButton = true,
|
this.showFlagButton = true,
|
||||||
|
this.showPinButton,
|
||||||
this.editMessageInputBuilder,
|
this.editMessageInputBuilder,
|
||||||
this.reverse = false,
|
this.reverse = false,
|
||||||
this.customActions = const [],
|
this.customActions = const [],
|
||||||
@@ -49,12 +54,21 @@ class MessageActionsModal extends StatefulWidget {
|
|||||||
/// [MessageThemeData] for message
|
/// [MessageThemeData] for message
|
||||||
final MessageThemeData messageTheme;
|
final MessageThemeData messageTheme;
|
||||||
|
|
||||||
|
/// Flag for showing reactions
|
||||||
|
final bool? showReactions;
|
||||||
|
|
||||||
/// Callback when copy is tapped
|
/// Callback when copy is tapped
|
||||||
final OnMessageTap? onCopyTap;
|
final OnMessageTap? onCopyTap;
|
||||||
|
|
||||||
|
/// Callback when delete is tapped
|
||||||
|
final bool? showDeleteMessage;
|
||||||
|
|
||||||
/// Flag for showing copy action
|
/// Flag for showing copy action
|
||||||
final bool showCopyMessage;
|
final bool showCopyMessage;
|
||||||
|
|
||||||
|
/// Flag for showing edit action
|
||||||
|
final bool? showEditMessage;
|
||||||
|
|
||||||
/// Flag for showing resend action
|
/// Flag for showing resend action
|
||||||
final bool showResendMessage;
|
final bool showResendMessage;
|
||||||
|
|
||||||
@@ -62,11 +76,14 @@ class MessageActionsModal extends StatefulWidget {
|
|||||||
final bool showReplyMessage;
|
final bool showReplyMessage;
|
||||||
|
|
||||||
/// Flag for showing thread reply action
|
/// Flag for showing thread reply action
|
||||||
final bool showThreadReplyMessage;
|
final bool? showThreadReplyMessage;
|
||||||
|
|
||||||
/// Flag for showing flag action
|
/// Flag for showing flag action
|
||||||
final bool showFlagButton;
|
final bool showFlagButton;
|
||||||
|
|
||||||
|
/// Flag for showing pin action
|
||||||
|
final bool? showPinButton;
|
||||||
|
|
||||||
/// Flag for reversing message
|
/// Flag for reversing message
|
||||||
final bool reverse;
|
final bool reverse;
|
||||||
|
|
||||||
@@ -80,6 +97,7 @@ class MessageActionsModal extends StatefulWidget {
|
|||||||
class _MessageActionsModalState extends State<MessageActionsModal> {
|
class _MessageActionsModalState extends State<MessageActionsModal> {
|
||||||
bool _showActions = true;
|
bool _showActions = true;
|
||||||
late List<String> _userPermissions;
|
late List<String> _userPermissions;
|
||||||
|
late bool _isMyMessage;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) => _showMessageOptionsModal();
|
Widget build(BuildContext context) => _showMessageOptionsModal();
|
||||||
@@ -114,6 +132,23 @@ class _MessageActionsModalState extends State<MessageActionsModal> {
|
|||||||
final shiftFactor =
|
final shiftFactor =
|
||||||
numberOfReactions < 5 ? (5 - numberOfReactions) * 0.1 : 0.0;
|
numberOfReactions < 5 ? (5 - numberOfReactions) * 0.1 : 0.0;
|
||||||
|
|
||||||
|
final hasEditPermission =
|
||||||
|
_userPermissions.contains(
|
||||||
|
PermissionType.updateAnyMessage,
|
||||||
|
) ||
|
||||||
|
_userPermissions.contains(PermissionType.updateOwnMessage);
|
||||||
|
|
||||||
|
final hasDeletePermission =
|
||||||
|
_userPermissions.contains(
|
||||||
|
PermissionType.deleteAnyMessage,
|
||||||
|
) ||
|
||||||
|
_userPermissions.contains(PermissionType.deleteOwnMessage);
|
||||||
|
|
||||||
|
final hasReactionPermission =
|
||||||
|
_userPermissions.contains(PermissionType.sendReaction);
|
||||||
|
|
||||||
|
print(widget.showReactions);
|
||||||
|
|
||||||
final child = Center(
|
final child = Center(
|
||||||
child: SingleChildScrollView(
|
child: SingleChildScrollView(
|
||||||
child: Padding(
|
child: Padding(
|
||||||
@@ -123,7 +158,7 @@ class _MessageActionsModalState extends State<MessageActionsModal> {
|
|||||||
? CrossAxisAlignment.end
|
? CrossAxisAlignment.end
|
||||||
: CrossAxisAlignment.start,
|
: CrossAxisAlignment.start,
|
||||||
children: <Widget>[
|
children: <Widget>[
|
||||||
if (_userPermissions.contains(PermissionType.sendReaction) &&
|
if ((widget.showReactions ?? hasReactionPermission) &&
|
||||||
(widget.message.status == MessageSendingStatus.sent))
|
(widget.message.status == MessageSendingStatus.sent))
|
||||||
Align(
|
Align(
|
||||||
alignment: Alignment(
|
alignment: Alignment(
|
||||||
@@ -163,23 +198,26 @@ class _MessageActionsModalState extends State<MessageActionsModal> {
|
|||||||
if (widget.showReplyMessage &&
|
if (widget.showReplyMessage &&
|
||||||
widget.message.status == MessageSendingStatus.sent)
|
widget.message.status == MessageSendingStatus.sent)
|
||||||
_buildReplyButton(context),
|
_buildReplyButton(context),
|
||||||
if (widget.showThreadReplyMessage &&
|
if ((widget.showThreadReplyMessage ??
|
||||||
|
_userPermissions
|
||||||
|
.contains(PermissionType.sendReply)) &&
|
||||||
(widget.message.status ==
|
(widget.message.status ==
|
||||||
MessageSendingStatus.sent) &&
|
MessageSendingStatus.sent) &&
|
||||||
widget.message.parentId == null)
|
widget.message.parentId == null)
|
||||||
_buildThreadReplyButton(context),
|
_buildThreadReplyButton(context),
|
||||||
if (widget.showResendMessage)
|
if (widget.showResendMessage)
|
||||||
_buildResendMessage(context),
|
_buildResendMessage(context),
|
||||||
if (_userPermissions
|
if (widget.showEditMessage ??
|
||||||
.contains(PermissionType.updateOwnMessage))
|
_isMyMessage && hasEditPermission)
|
||||||
_buildEditMessage(context),
|
_buildEditMessage(context),
|
||||||
if (widget.showCopyMessage) _buildCopyButton(context),
|
if (widget.showCopyMessage) _buildCopyButton(context),
|
||||||
if (widget.showFlagButton) _buildFlagButton(context),
|
if (widget.showFlagButton) _buildFlagButton(context),
|
||||||
if (_userPermissions
|
if (widget.showPinButton ??
|
||||||
.contains(PermissionType.pinMessage))
|
_userPermissions
|
||||||
|
.contains(PermissionType.pinMessage))
|
||||||
_buildPinButton(context),
|
_buildPinButton(context),
|
||||||
if (_userPermissions
|
if (widget.showDeleteMessage ??
|
||||||
.contains(PermissionType.deleteOwnMessage))
|
_isMyMessage && hasDeletePermission)
|
||||||
_buildDeleteButton(context),
|
_buildDeleteButton(context),
|
||||||
...widget.customActions
|
...widget.customActions
|
||||||
.map((action) => _buildCustomAction(
|
.map((action) => _buildCustomAction(
|
||||||
@@ -647,6 +685,8 @@ class _MessageActionsModalState extends State<MessageActionsModal> {
|
|||||||
_userPermissions =
|
_userPermissions =
|
||||||
newStreamChannel.channel.state?.channelState.channel?.ownCapabilities ??
|
newStreamChannel.channel.state?.channelState.channel?.ownCapabilities ??
|
||||||
[];
|
[];
|
||||||
|
_isMyMessage = widget.message.user!.id ==
|
||||||
|
newStreamChannel.channel.client.state.currentUser!.id;
|
||||||
super.didChangeDependencies();
|
super.didChangeDependencies();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user