add delete message

This commit is contained in:
Salvatore Giordano
2020-02-26 18:21:01 +01:00
parent 671e6f1f57
commit df86c377b2
2 changed files with 196 additions and 141 deletions
+2
View File
@@ -40,6 +40,8 @@ class ChannelPreview extends StatelessWidget {
} }
Text _buildDate(BuildContext context, DateTime lastMessageAt) { Text _buildDate(BuildContext context, DateTime lastMessageAt) {
lastMessageAt = lastMessageAt.toLocal();
String stringDate; String stringDate;
final now = DateTime.now(); final now = DateTime.now();
+71 -18
View File
@@ -51,6 +51,23 @@ class _MessageWidgetState extends State<MessageWidget>
final alignment = final alignment =
isMyMessage ? Alignment.centerRight : Alignment.centerLeft; isMyMessage ? Alignment.centerRight : Alignment.centerLeft;
Widget child;
if (widget.message.type == 'deleted') {
child = Align(
alignment: alignment,
child: Padding(
padding: const EdgeInsets.symmetric(
horizontal: 54,
vertical: 14,
),
child: Text(
'This message was deleted...',
style: TextStyle(fontStyle: FontStyle.italic),
),
),
);
} else {
var row = <Widget>[ var row = <Widget>[
Column( Column(
crossAxisAlignment: crossAxisAlignment:
@@ -78,7 +95,8 @@ class _MessageWidgetState extends State<MessageWidget>
row = row.reversed.toList(); row = row.reversed.toList();
} }
return Container( child = AnimatedContainer(
duration: Duration(milliseconds: 300),
padding: const EdgeInsets.symmetric(horizontal: 10.0), padding: const EdgeInsets.symmetric(horizontal: 10.0),
margin: EdgeInsets.only( margin: EdgeInsets.only(
top: isLastUser ? 5 : 24, top: isLastUser ? 5 : 24,
@@ -94,6 +112,12 @@ class _MessageWidgetState extends State<MessageWidget>
); );
} }
return AnimatedSwitcher(
duration: Duration(milliseconds: 300),
child: child,
);
}
Widget _buildThreadIndicator(BuildContext context) { Widget _buildThreadIndicator(BuildContext context) {
return widget.message.replyCount > 0 return widget.message.replyCount > 0
? GestureDetector( ? GestureDetector(
@@ -147,7 +171,9 @@ class _MessageWidgetState extends State<MessageWidget>
if (attachmentWidget != null) { if (attachmentWidget != null) {
final boxDecoration = _buildBoxDecoration(isMyMessage, isLastUser) final boxDecoration = _buildBoxDecoration(isMyMessage, isLastUser)
.copyWith(color: Color(0xffebebeb)); .copyWith(color: Color(0xffebebeb));
return ClipRRect( return Padding(
padding: const EdgeInsets.only(bottom: 2.0),
child: ClipRRect(
borderRadius: boxDecoration.borderRadius, borderRadius: boxDecoration.borderRadius,
child: Container( child: Container(
decoration: boxDecoration, decoration: boxDecoration,
@@ -167,7 +193,8 @@ class _MessageWidgetState extends State<MessageWidget>
padding: const EdgeInsets.all(8.0), padding: const EdgeInsets.all(8.0),
child: Column( child: Column(
mainAxisSize: MainAxisSize.min, mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment:
CrossAxisAlignment.start,
children: <Widget>[ children: <Widget>[
Text( Text(
attachment.title, attachment.title,
@@ -214,6 +241,7 @@ class _MessageWidgetState extends State<MessageWidget>
top: nOfAttachmentWidgets > 1 ? 5 : 0, top: nOfAttachmentWidgets > 1 ? 5 : 0,
), ),
), ),
),
); );
} }
@@ -223,8 +251,6 @@ class _MessageWidgetState extends State<MessageWidget>
); );
if (widget.message.text.trim().isNotEmpty) { if (widget.message.text.trim().isNotEmpty) {
final topPadding =
widget.message.reactionCounts?.isNotEmpty == true ? 2.0 : 0.0;
column.children.addAll( column.children.addAll(
<Widget>[ <Widget>[
IntrinsicWidth( IntrinsicWidth(
@@ -246,7 +272,7 @@ class _MessageWidgetState extends State<MessageWidget>
? Positioned( ? Positioned(
left: isMyMessage ? 8 : null, left: isMyMessage ? 8 : null,
right: !isMyMessage ? 8 : null, right: !isMyMessage ? 8 : null,
top: -4, top: -6,
child: CustomPaint( child: CustomPaint(
painter: ReactionBubblePainter(), painter: ReactionBubblePainter(),
), ),
@@ -258,11 +284,6 @@ class _MessageWidgetState extends State<MessageWidget>
left: isMyMessage ? 8.0 : 0.0, left: isMyMessage ? 8.0 : 0.0,
), ),
child: Container( child: Container(
margin: EdgeInsets.only(
top: nOfAttachmentWidgets > 0
? (topPadding)
: (topPadding),
),
decoration: _buildBoxDecoration(isMyMessage, decoration: _buildBoxDecoration(isMyMessage,
isLastUser || nOfAttachmentWidgets > 0), isLastUser || nOfAttachmentWidgets > 0),
padding: EdgeInsets.all(10), padding: EdgeInsets.all(10),
@@ -289,11 +310,11 @@ class _MessageWidgetState extends State<MessageWidget>
return GestureDetector( return GestureDetector(
child: column, child: column,
onLongPress: () { onLongPress: () {
_showMessageBottomSheet(context); _showMessageBottomSheet(context, isMyMessage);
}); });
} }
void _showMessageBottomSheet(BuildContext context) { void _showMessageBottomSheet(BuildContext context, bool isMyMessage) {
showModalBottomSheet( showModalBottomSheet(
context: context, context: context,
builder: (context) { builder: (context) {
@@ -301,7 +322,11 @@ class _MessageWidgetState extends State<MessageWidget>
final textStyle = TextStyle( final textStyle = TextStyle(
fontSize: fontSize, fontSize: fontSize,
); );
return Row( return Column(
mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.stretch,
children: <Widget>[
Row(
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.center, mainAxisAlignment: MainAxisAlignment.center,
mainAxisSize: MainAxisSize.min, mainAxisSize: MainAxisSize.min,
@@ -327,12 +352,38 @@ class _MessageWidgetState extends State<MessageWidget>
}, },
), ),
ownReactionIndex != -1 ownReactionIndex != -1
? Text(widget.message.ownReactions[ownReactionIndex].score ? Padding(
.toString()) padding: const EdgeInsets.only(bottom: 4.0),
child: Text(widget
.message.ownReactions[ownReactionIndex].score
.toString()),
)
: SizedBox(), : SizedBox(),
], ],
); );
}).toList(), }).toList(),
),
isMyMessage
? FlatButton(
child: Padding(
padding: const EdgeInsets.all(28.0),
child: Text(
'Delete message',
style: Theme.of(context)
.textTheme
.headline
.copyWith(color: Colors.red),
),
),
onPressed: () {
StreamChat.of(context)
.client
.deleteMessage(widget.message.id);
Navigator.pop(context);
},
)
: SizedBox(),
],
); );
}); });
} }
@@ -340,10 +391,12 @@ class _MessageWidgetState extends State<MessageWidget>
Widget _buildReactions(bool isMyMessage) { Widget _buildReactions(bool isMyMessage) {
return GestureDetector( return GestureDetector(
onTap: () { onTap: () {
_showMessageBottomSheet(context); _showMessageBottomSheet(context, isMyMessage);
}, },
child: Padding( child: Padding(
padding: const EdgeInsets.symmetric(vertical: 2.0), padding: EdgeInsets.symmetric(
vertical:
widget.message.reactionCounts?.isNotEmpty == true ? 4.0 : 0),
child: AnimatedContainer( child: AnimatedContainer(
duration: Duration(milliseconds: 300), duration: Duration(milliseconds: 300),
curve: Curves.decelerate, curve: Curves.decelerate,