version bump

This commit is contained in:
Salvatore Giordano
2020-04-28 10:21:46 +02:00
parent 3d72ea699c
commit 057d397d8e
7 changed files with 79 additions and 95 deletions
+4
View File
@@ -1,3 +1,7 @@
## 0.2.0-alpha+11
- Fix message builder and add messageList to it
## 0.2.0-alpha+10 ## 0.2.0-alpha+10
- Add date divider builder - Add date divider builder
+1 -1
View File
@@ -91,7 +91,7 @@ class MyApp extends StatelessWidget {
return MaterialApp( return MaterialApp(
theme: ThemeData.light(), theme: ThemeData.light(),
darkTheme: ThemeData.dark(), darkTheme: ThemeData.dark(),
themeMode: ThemeMode.dark, themeMode: ThemeMode.system,
home: Container( home: Container(
child: StreamChat( child: StreamChat(
client: client, client: client,
+11 -29
View File
@@ -10,7 +10,8 @@ import 'date_divider.dart';
import 'message_widget.dart'; import 'message_widget.dart';
import 'stream_channel.dart'; import 'stream_channel.dart';
typedef MessageBuilder = Widget Function(BuildContext, Message, int index); typedef MessageBuilder = Widget Function(
BuildContext, Message, List<Message>, int index);
typedef ParentMessageBuilder = Widget Function(BuildContext, Message); typedef ParentMessageBuilder = Widget Function(BuildContext, Message);
typedef ThreadBuilder = Widget Function(BuildContext context, Message parent); typedef ThreadBuilder = Widget Function(BuildContext context, Message parent);
typedef ThreadTapCallback = void Function(Message, Widget); typedef ThreadTapCallback = void Function(Message, Widget);
@@ -72,7 +73,6 @@ class MessageListView extends StatefulWidget {
this.attachmentBuilders, this.attachmentBuilders,
this.dateDividerBuilder, this.dateDividerBuilder,
this.showAvatar = true, this.showAvatar = true,
this.customClipperBuilder,
}) : super(key: key); }) : super(key: key);
/// Function used to build a custom message widget /// Function used to build a custom message widget
@@ -115,10 +115,6 @@ class MessageListView extends StatefulWidget {
/// if true shows the user avatar /// if true shows the user avatar
final bool showAvatar; final bool showAvatar;
/// Custom clipper applied to the message bubble
final CustomClipper Function(BuildContext, Message, int index)
customClipperBuilder;
@override @override
_MessageListViewState createState() => _MessageListViewState(); _MessageListViewState createState() => _MessageListViewState();
} }
@@ -181,13 +177,6 @@ class _MessageListViewState extends State<MessageListView> {
onMessageActions: widget.onMessageActions, onMessageActions: widget.onMessageActions,
attachmentBuilders: widget.attachmentBuilders, attachmentBuilders: widget.attachmentBuilders,
showAvatar: widget.showAvatar, showAvatar: widget.showAvatar,
customClipperBuilder: (message) {
return widget.customClipperBuilder(
context,
message,
i,
);
},
), ),
Padding( Padding(
padding: const EdgeInsets.symmetric(horizontal: 32), padding: const EdgeInsets.symmetric(horizontal: 32),
@@ -237,7 +226,8 @@ class _MessageListViewState extends State<MessageListView> {
if (widget.messageBuilder != null) { if (widget.messageBuilder != null) {
messageWidget = Builder( messageWidget = Builder(
key: ValueKey<String>('MESSAGE-${message.id}'), key: ValueKey<String>('MESSAGE-${message.id}'),
builder: (_) => widget.messageBuilder(context, message, i), builder: (_) =>
widget.messageBuilder(context, message, _messages, i),
); );
} else { } else {
messageWidget = MessageWidget( messageWidget = MessageWidget(
@@ -253,11 +243,6 @@ class _MessageListViewState extends State<MessageListView> {
onMessageActions: widget.onMessageActions, onMessageActions: widget.onMessageActions,
attachmentBuilders: widget.attachmentBuilders, attachmentBuilders: widget.attachmentBuilders,
showAvatar: widget.showAvatar, showAvatar: widget.showAvatar,
customClipperBuilder: (message) {
if (widget.customClipperBuilder != null) {
return widget.customClipperBuilder(context, message, i);
}
},
); );
} }
} }
@@ -331,8 +316,12 @@ class _MessageListViewState extends State<MessageListView> {
if (widget.messageBuilder != null) { if (widget.messageBuilder != null) {
messageWidget = Builder( messageWidget = Builder(
key: ValueKey<String>('MESSAGE-${message.id}'), key: ValueKey<String>('MESSAGE-${message.id}'),
builder: (_) => builder: (_) => widget.messageBuilder(
widget.messageBuilder(context, message, _messages.length - 1), context,
message,
_messages,
_messages.length - 1,
),
); );
} else { } else {
messageWidget = MessageWidget( messageWidget = MessageWidget(
@@ -348,10 +337,6 @@ class _MessageListViewState extends State<MessageListView> {
onMessageActions: widget.onMessageActions, onMessageActions: widget.onMessageActions,
attachmentBuilders: widget.attachmentBuilders, attachmentBuilders: widget.attachmentBuilders,
showAvatar: widget.showAvatar, showAvatar: widget.showAvatar,
customClipperBuilder: (message) {
return widget.customClipperBuilder(
context, message, _messages.length - 1);
},
); );
} }
@@ -378,7 +363,7 @@ class _MessageListViewState extends State<MessageListView> {
if (widget.messageBuilder != null) { if (widget.messageBuilder != null) {
messageWidget = Builder( messageWidget = Builder(
key: ValueKey<String>('MESSAGE-${message.id}'), key: ValueKey<String>('MESSAGE-${message.id}'),
builder: (_) => widget.messageBuilder(context, message, 0), builder: (_) => widget.messageBuilder(context, message, _messages, 0),
); );
} else { } else {
messageWidget = MessageWidget( messageWidget = MessageWidget(
@@ -394,9 +379,6 @@ class _MessageListViewState extends State<MessageListView> {
onMessageActions: widget.onMessageActions, onMessageActions: widget.onMessageActions,
attachmentBuilders: widget.attachmentBuilders, attachmentBuilders: widget.attachmentBuilders,
showAvatar: widget.showAvatar, showAvatar: widget.showAvatar,
customClipperBuilder: (message) {
return widget.customClipperBuilder(context, message, 0);
},
); );
} }
+15 -22
View File
@@ -1,3 +1,5 @@
import 'dart:math';
import 'package:flutter/foundation.dart'; import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter/widgets.dart'; import 'package:flutter/widgets.dart';
@@ -49,7 +51,6 @@ class MessageWidget extends StatefulWidget {
this.showVideoFullScreen = true, this.showVideoFullScreen = true,
this.attachmentBuilders, this.attachmentBuilders,
this.showAvatar = true, this.showAvatar = true,
this.customClipperBuilder,
}) : super(key: key); }) : super(key: key);
/// Function called on mention tap /// Function called on mention tap
@@ -88,9 +89,6 @@ class MessageWidget extends StatefulWidget {
/// if true shows the user avatar /// if true shows the user avatar
final bool showAvatar; final bool showAvatar;
/// Custom clipper applied to the message bubble
final CustomClipper Function(Message) customClipperBuilder;
@override @override
_MessageWidgetState createState() => _MessageWidgetState(); _MessageWidgetState createState() => _MessageWidgetState();
} }
@@ -486,18 +484,9 @@ class _MessageWidgetState extends State<MessageWidget>
right: _isMyMessage ? 0.0 : 8.0, right: _isMyMessage ? 0.0 : 8.0,
left: _isMyMessage ? 8.0 : 0.0, left: _isMyMessage ? 8.0 : 0.0,
), ),
child: ClipPath(
clipper: widget.customClipperBuilder != null
? widget.customClipperBuilder(widget.message)
: null,
clipBehavior: Clip.hardEdge,
child: Container( child: Container(
decoration: decoration:
_buildBoxDecoration(_isLastUser || nOfAttachmentWidgets > 0) _buildBoxDecoration(_isLastUser || nOfAttachmentWidgets > 0),
.copyWith(
borderRadius: widget.customClipperBuilder != null
? BorderRadius.circular(0)
: null),
padding: EdgeInsets.all(10), padding: EdgeInsets.all(10),
constraints: BoxConstraints.loose( constraints: BoxConstraints.loose(
Size.fromWidth(MediaQuery.of(context).size.width * 0.7), Size.fromWidth(MediaQuery.of(context).size.width * 0.7),
@@ -507,8 +496,7 @@ class _MessageWidgetState extends State<MessageWidget>
data: text, data: text,
onTapLink: (link) { onTapLink: (link) {
if (link.startsWith('@')) { if (link.startsWith('@')) {
final mentionedUser = final mentionedUser = widget.message.mentionedUsers.firstWhere(
widget.message.mentionedUsers.firstWhere(
(u) => '@${u.name.replaceAll(' ', '')}' == link, (u) => '@${u.name.replaceAll(' ', '')}' == link,
orElse: () => null, orElse: () => null,
); );
@@ -540,7 +528,6 @@ class _MessageWidgetState extends State<MessageWidget>
), ),
), ),
), ),
),
); );
} }
@@ -555,9 +542,13 @@ class _MessageWidgetState extends State<MessageWidget>
Widget _buildReactionPaint() { Widget _buildReactionPaint() {
return widget.message.reactionCounts?.isNotEmpty == true return widget.message.reactionCounts?.isNotEmpty == true
? Positioned( ? Positioned(
left: _isMyMessage ? 8 : null, left: _isMyMessage ? 4 : null,
right: !_isMyMessage ? 8 : null, right: !_isMyMessage ? 4 : null,
top: -6, top: -6,
child: Transform(
transform:
!_isMyMessage ? Matrix4.rotationY(pi) : Matrix4.identity(),
alignment: Alignment.center,
child: CustomPaint( child: CustomPaint(
painter: _ReactionBubblePainter( painter: _ReactionBubblePainter(
Theme.of(context).brightness == Brightness.dark Theme.of(context).brightness == Brightness.dark
@@ -565,6 +556,7 @@ class _MessageWidgetState extends State<MessageWidget>
: Colors.black, : Colors.black,
), ),
), ),
),
) )
: SizedBox(); : SizedBox();
} }
@@ -895,9 +887,10 @@ class _ReactionBubblePainter extends CustomPainter {
void paint(Canvas canvas, Size size) { void paint(Canvas canvas, Size size) {
final paint = Paint()..color = color; final paint = Paint()..color = color;
final path = Path(); final path = Path();
path.arcToPoint(Offset(-6, -6)); path.lineTo(-2, -6);
path.arcToPoint(Offset(0, 10)); path.lineTo(0, 10);
path.arcToPoint(Offset(6, -6)); path.lineTo(10, -6);
path.lineTo(-2, -6);
canvas.drawPath(path, paint); canvas.drawPath(path, paint);
} }
-3
View File
@@ -130,9 +130,6 @@ class ThreadHeader extends StatelessWidget implements PreferredSizeWidget {
child: Icon( child: Icon(
Icons.close, Icons.close,
size: 15, size: 15,
color: Theme.of(context).brightness == Brightness.dark
? Colors.white
: Colors.black,
), ),
), ),
), ),
+8
View File
@@ -7,12 +7,20 @@ export 'src/channel_name.dart';
export 'src/channel_preview.dart'; export 'src/channel_preview.dart';
export 'src/channels_bloc.dart'; export 'src/channels_bloc.dart';
export 'src/date_divider.dart'; export 'src/date_divider.dart';
export 'src/deleted_message.dart';
export 'src/file_attachment.dart';
export 'src/giphy_attachment.dart';
export 'src/image_attachment.dart';
export 'src/message_input.dart'; export 'src/message_input.dart';
export 'src/message_list_view.dart'; export 'src/message_list_view.dart';
export 'src/message_widget.dart'; export 'src/message_widget.dart';
export 'src/reaction_picker.dart'; export 'src/reaction_picker.dart';
export 'src/reply_indicator.dart';
export 'src/sending_indicator.dart';
export 'src/stream_channel.dart'; export 'src/stream_channel.dart';
export 'src/stream_chat.dart'; export 'src/stream_chat.dart';
export 'src/stream_chat_theme.dart'; export 'src/stream_chat_theme.dart';
export 'src/thread_header.dart'; export 'src/thread_header.dart';
export 'src/typing_indicator.dart'; export 'src/typing_indicator.dart';
export 'src/user_avatar.dart';
export 'src/video_attachment.dart';
+1 -1
View File
@@ -1,7 +1,7 @@
name: stream_chat_flutter name: stream_chat_flutter
homepage: https://github.com/GetStream/stream-chat-flutter homepage: https://github.com/GetStream/stream-chat-flutter
description: Stream Chat official Flutter SDK. Build your own chat experience using Dart and Flutter. description: Stream Chat official Flutter SDK. Build your own chat experience using Dart and Flutter.
version: 0.2.0-alpha+10 version: 0.2.0-alpha+11
environment: environment:
sdk: ">=2.3.0 <3.0.0" sdk: ">=2.3.0 <3.0.0"