From 706c3d70b4934832aed1c62058a8d2195a0f93cb Mon Sep 17 00:00:00 2001 From: Salvatore Giordano Date: Thu, 23 Apr 2020 11:42:06 +0200 Subject: [PATCH] fix attachmentbuilders on hot reload --- lib/src/message_widget.dart | 77 +++++++++++++++++++++---------------- 1 file changed, 43 insertions(+), 34 deletions(-) diff --git a/lib/src/message_widget.dart b/lib/src/message_widget.dart index 32689aa6..d1dafff7 100644 --- a/lib/src/message_widget.dart +++ b/lib/src/message_widget.dart @@ -4,9 +4,6 @@ import 'package:flutter/widgets.dart'; import 'package:flutter_markdown/flutter_markdown.dart'; import 'package:jiffy/jiffy.dart'; import 'package:stream_chat/stream_chat.dart'; -import 'package:stream_chat_flutter/src/file_attachment.dart'; -import 'package:stream_chat_flutter/src/giphy_attachment.dart'; -import 'package:stream_chat_flutter/src/image_attachment.dart'; import 'package:stream_chat_flutter/src/message_input.dart'; import 'package:stream_chat_flutter/src/message_list_view.dart'; import 'package:stream_chat_flutter/src/reaction_picker.dart'; @@ -20,6 +17,9 @@ import 'package:stream_chat_flutter/src/video_attachment.dart'; import 'package:stream_chat_flutter/stream_chat_flutter.dart'; import 'deleted_message.dart'; +import 'file_attachment.dart'; +import 'giphy_attachment.dart'; +import 'image_attachment.dart'; import 'stream_chat.dart'; typedef AttachmentBuilder = Widget Function(BuildContext, Message, Attachment); @@ -80,7 +80,7 @@ class MessageWidget extends StatefulWidget { final Map attachmentBuilders; @override - _MessageWidgetState createState() => _MessageWidgetState(attachmentBuilders); + _MessageWidgetState createState() => _MessageWidgetState(); } class _MessageWidgetState extends State @@ -99,36 +99,6 @@ class _MessageWidgetState extends State Map _attachmentBuilders; - _MessageWidgetState(Map attachmentBuilders) { - _attachmentBuilders = { - 'image': (context, message, attachment) { - return ImageAttachment( - attachment: attachment, - messageTheme: _messageTheme, - ); - }, - 'video': (context, message, attachment) { - return VideoAttachment( - enableFullScreen: widget.showVideoFullScreen, - attachment: attachment, - messageTheme: _messageTheme, - ); - }, - 'giphy': (context, message, attachment) { - return GiphyAttachment( - attachment: attachment, - messageTheme: _messageTheme, - message: message, - ); - }, - 'file': (context, message, attachment) { - return FileAttachment( - attachment: attachment, - ); - }, - }..addAll(attachmentBuilders ?? {}); - } - @override Widget build(BuildContext context) { super.build(context); @@ -216,6 +186,45 @@ class _MessageWidgetState extends State _isNextUser = _nextUserId == _messageUserId; _isMyMessage = _messageUserId == _currentUserId; + + _mergeAttachmentBuilders(); + } + + @override + void didUpdateWidget(MessageWidget oldWidget) { + super.didUpdateWidget(oldWidget); + + _mergeAttachmentBuilders(); + } + + void _mergeAttachmentBuilders() { + _attachmentBuilders = { + 'image': (context, message, attachment) { + return ImageAttachment( + attachment: attachment, + messageTheme: _messageTheme, + ); + }, + 'video': (context, message, attachment) { + return VideoAttachment( + enableFullScreen: widget.showVideoFullScreen, + attachment: attachment, + messageTheme: _messageTheme, + ); + }, + 'giphy': (context, message, attachment) { + return GiphyAttachment( + attachment: attachment, + messageTheme: _messageTheme, + message: message, + ); + }, + 'file': (context, message, attachment) { + return FileAttachment( + attachment: attachment, + ); + }, + }..addAll(widget.attachmentBuilders ?? {}); } Widget _buildDeletedMessage(Alignment alignment) {