Merge branch 'feature/new-ui' into feature/group-info-screen

This commit is contained in:
Salvatore Giordano
2021-01-04 13:44:04 +01:00
8 changed files with 196 additions and 250 deletions
+1 -1
View File
@@ -5,7 +5,7 @@ import 'channel_info.dart';
import 'option_list_tile.dart'; import 'option_list_tile.dart';
class ChannelBottomSheet extends StatefulWidget { class ChannelBottomSheet extends StatefulWidget {
VoidCallback onViewInfoTap; final VoidCallback onViewInfoTap;
ChannelBottomSheet({this.onViewInfoTap}); ChannelBottomSheet({this.onViewInfoTap});
+2 -6
View File
@@ -47,14 +47,10 @@ class ImageFooter extends StatefulWidget implements PreferredSizeWidget {
this.message, this.message,
this.videoPackages, this.videoPackages,
this.mediaSelectedCallBack, this.mediaSelectedCallBack,
}) : preferredSize = Size.fromHeight(kToolbarHeight), }) : super(key: key);
super(key: key);
@override @override
_ImageFooterState createState() => _ImageFooterState(); _ImageFooterState createState() => _ImageFooterState();
@override
final Size preferredSize;
} }
class _ImageFooterState extends State<ImageFooter> { class _ImageFooterState extends State<ImageFooter> {
@@ -168,7 +164,7 @@ class _ImageFooterState extends State<ImageFooter> {
); );
} }
Widget _buildPhotosModal(context) { void _buildPhotosModal(context) {
var videoAttachments = widget.mediaAttachments var videoAttachments = widget.mediaAttachments
.where((element) => element.type == 'video') .where((element) => element.type == 'video')
.toList(); .toList();
+3 -8
View File
@@ -37,13 +37,12 @@ class _MediaListViewState extends State<MediaListView> {
final _media = <AssetEntity>[]; final _media = <AssetEntity>[];
final ScrollController _scrollController = ScrollController(); final ScrollController _scrollController = ScrollController();
int _currentPage = 0; int _currentPage = 0;
bool _endPagination = false;
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return LazyLoadScrollView( return LazyLoadScrollView(
onEndOfPage: () { onEndOfPage: () async {
_getMedia(); return _getMedia();
}, },
child: GridView.builder( child: GridView.builder(
itemCount: _media.length, itemCount: _media.length,
@@ -161,11 +160,7 @@ class _MediaListViewState extends State<MediaListView> {
final media = await assetList.getAssetListPaged(_currentPage, 50); final media = await assetList.getAssetListPaged(_currentPage, 50);
if (media.isEmpty) { if (!media.isEmpty) {
setState(() {
_endPagination = true;
});
} else {
setState(() { setState(() {
_media.addAll(media); _media.addAll(media);
}); });
+14 -40
View File
@@ -266,6 +266,8 @@ class _MessageWidgetState extends State<MessageWidget> {
true; true;
return Portal( return Portal(
child: GestureDetector(
onLongPress: () => onLongPress(context),
child: Padding( child: Padding(
padding: widget.padding ?? EdgeInsets.all(8), padding: widget.padding ?? EdgeInsets.all(8),
child: Transform( child: Transform(
@@ -317,7 +319,9 @@ class _MessageWidgetState extends State<MessageWidget> {
Padding( Padding(
padding: widget.showReactions padding: widget.showReactions
? EdgeInsets.only( ? EdgeInsets.only(
top: widget.message.reactionCounts top: widget
.message
.reactionCounts
?.isNotEmpty == ?.isNotEmpty ==
true true
? 18 ? 18
@@ -332,8 +336,8 @@ class _MessageWidgetState extends State<MessageWidget> {
widget.reverse ? pi : 0), widget.reverse ? pi : 0),
child: DeletedMessage( child: DeletedMessage(
reverse: widget.reverse, reverse: widget.reverse,
borderRadiusGeometry: borderRadiusGeometry: widget
widget.borderRadiusGeometry, .borderRadiusGeometry,
borderSide: widget.borderSide, borderSide: widget.borderSide,
shape: widget.shape, shape: widget.shape,
messageTheme: messageTheme:
@@ -375,7 +379,8 @@ class _MessageWidgetState extends State<MessageWidget> {
hasFiles ? 2.0 : 0.0), hasFiles ? 2.0 : 0.0),
child: Column( child: Column(
crossAxisAlignment: crossAxisAlignment:
CrossAxisAlignment.start, CrossAxisAlignment
.start,
mainAxisSize: mainAxisSize:
MainAxisSize.min, MainAxisSize.min,
children: <Widget>[ children: <Widget>[
@@ -385,7 +390,8 @@ class _MessageWidgetState extends State<MessageWidget> {
.trim() .trim()
.isNotEmpty && .isNotEmpty &&
!isGiphy) !isGiphy)
_buildTextBubble(context), _buildTextBubble(
context),
], ],
), ),
), ),
@@ -438,6 +444,7 @@ class _MessageWidgetState extends State<MessageWidget> {
), ),
), ),
), ),
),
); );
} }
@@ -579,33 +586,6 @@ class _MessageWidgetState extends State<MessageWidget> {
widget.message.attachments?.any((element) => element.type == 'giphy') == widget.message.attachments?.any((element) => element.type == 'giphy') ==
true; true;
Widget _buildReadIndicator() {
var padding = 0.0;
return Stack(
children: widget.readList.map((e) {
padding += 10.0;
return Positioned(
left: padding - 10,
bottom: 0,
top: 0,
child: Material(
color: StreamChatTheme.of(context).colorTheme.white,
clipBehavior: Clip.antiAlias,
shape: CircleBorder(),
child: Padding(
padding: const EdgeInsets.all(1.0),
child: UserAvatar(
user: e.user,
constraints: BoxConstraints.loose(Size.fromRadius(8)),
showOnlineStatus: false,
),
),
),
);
}).toList(),
);
}
Widget _buildReactionIndicator( Widget _buildReactionIndicator(
BuildContext context, BuildContext context,
) { ) {
@@ -773,9 +753,7 @@ class _MessageWidgetState extends State<MessageWidget> {
}) { }) {
final attachmentShape = final attachmentShape =
widget.attachmentShape ?? widget.shape ?? _getDefaultShape(context); widget.attachmentShape ?? widget.shape ?? _getDefaultShape(context);
return GestureDetector( return Material(
onLongPress: () => onLongPress(context),
child: Material(
color: _getBackgroundColor(), color: _getBackgroundColor(),
clipBehavior: Clip.antiAlias, clipBehavior: Clip.antiAlias,
shape: attachmentShape, shape: attachmentShape,
@@ -792,7 +770,6 @@ class _MessageWidgetState extends State<MessageWidget> {
), ),
), ),
), ),
),
); );
} }
@@ -888,10 +865,7 @@ class _MessageWidgetState extends State<MessageWidget> {
], ],
), ),
); );
return GestureDetector( return child;
onLongPress: () => onLongPress(context),
child: child,
);
} }
bool get isOnlyEmoji => bool get isOnlyEmoji =>
+5 -5
View File
@@ -136,11 +136,11 @@ class _ReactionPickerState extends State<ReactionPicker>
/// Add a reaction to the message /// Add a reaction to the message
void sendReaction(BuildContext context, String reactionType) { void sendReaction(BuildContext context, String reactionType) {
StreamChannel.of(context) StreamChannel.of(context).channel.sendReaction(
.channel widget.message,
.sendReaction(widget.message, reactionType, extraData: { reactionType,
'enforce_unique': true, enforceUnique: true,
}); );
pop(); pop();
} }
-1
View File
@@ -112,7 +112,6 @@ class StreamChatState extends State<StreamChat> with WidgetsBindingObserver {
inputBackground: themeData?.channelTheme?.inputBackground, inputBackground: themeData?.channelTheme?.inputBackground,
messageInputButtonIconTheme: messageInputButtonIconTheme:
themeData?.channelTheme?.messageInputButtonIconTheme, themeData?.channelTheme?.messageInputButtonIconTheme,
inputGradient: themeData?.channelTheme?.inputGradient,
messageInputButtonTheme: messageInputButtonTheme:
themeData?.channelTheme?.messageInputButtonTheme, themeData?.channelTheme?.messageInputButtonTheme,
), ),
+5 -23
View File
@@ -92,12 +92,7 @@ class StreamChatThemeData {
return defaultTheme.copyWith( return defaultTheme.copyWith(
primaryIconTheme: theme.primaryIconTheme, primaryIconTheme: theme.primaryIconTheme,
channelTheme: defaultTheme.channelTheme.copyWith( channelTheme: defaultTheme.channelTheme,
inputGradient: LinearGradient(colors: [
theme.accentColor.withOpacity(.5),
theme.accentColor,
]),
),
ownMessageTheme: defaultTheme.ownMessageTheme.copyWith( ownMessageTheme: defaultTheme.ownMessageTheme.copyWith(
replies: defaultTheme.ownMessageTheme.replies.copyWith( replies: defaultTheme.ownMessageTheme.replies.copyWith(
color: theme.accentColor, color: theme.accentColor,
@@ -168,8 +163,6 @@ class StreamChatThemeData {
this.channelTheme.messageInputButtonIconTheme, this.channelTheme.messageInputButtonIconTheme,
messageInputButtonTheme: channelTheme.messageInputButtonTheme ?? messageInputButtonTheme: channelTheme.messageInputButtonTheme ??
this.channelTheme.messageInputButtonTheme, this.channelTheme.messageInputButtonTheme,
inputGradient:
channelTheme.inputGradient ?? this.channelTheme.inputGradient,
inputBackground: channelTheme.inputBackground ?? inputBackground: channelTheme.inputBackground ??
this.channelTheme.inputBackground, this.channelTheme.inputBackground,
) ?? ) ??
@@ -273,10 +266,6 @@ class StreamChatThemeData {
), ),
), ),
inputBackground: colorTheme.white.withAlpha(12), inputBackground: colorTheme.white.withAlpha(12),
inputGradient: LinearGradient(colors: [
Color(0xFF00AEFF),
Color(0xFF0076FF),
]),
), ),
ownMessageTheme: MessageTheme( ownMessageTheme: MessageTheme(
messageText: TextStyle( messageText: TextStyle(
@@ -342,19 +331,19 @@ class StreamChatThemeData {
assetName: 'Icon_love_reaction.svg', assetName: 'Icon_love_reaction.svg',
), ),
ReactionIcon( ReactionIcon(
type: 'thumbs_up', type: 'like',
assetName: 'Icon_thumbs_up_reaction.svg', assetName: 'Icon_thumbs_up_reaction.svg',
), ),
ReactionIcon( ReactionIcon(
type: 'thumbs_down', type: 'sad',
assetName: 'Icon_thumbs_down_reaction.svg', assetName: 'Icon_thumbs_down_reaction.svg',
), ),
ReactionIcon( ReactionIcon(
type: 'lol', type: 'haha',
assetName: 'Icon_LOL_reaction.svg', assetName: 'Icon_LOL_reaction.svg',
), ),
ReactionIcon( ReactionIcon(
type: 'wut', type: 'wow',
assetName: 'Icon_wut_reaction.svg', assetName: 'Icon_wut_reaction.svg',
), ),
], ],
@@ -597,9 +586,6 @@ class ChannelTheme {
/// Theme of the send button in [MessageInput] /// Theme of the send button in [MessageInput]
final ButtonThemeData messageInputButtonTheme; final ButtonThemeData messageInputButtonTheme;
/// Gradient of [MessageInput]
final Gradient inputGradient;
/// Background color of [MessageInput] /// Background color of [MessageInput]
final Color inputBackground; final Color inputBackground;
@@ -608,7 +594,6 @@ class ChannelTheme {
this.messageInputButtonIconTheme, this.messageInputButtonIconTheme,
this.messageInputButtonTheme, this.messageInputButtonTheme,
this.inputBackground, this.inputBackground,
this.inputGradient,
}); });
/// Creates a copy of [ChannelTheme] with specified attributes overridden. /// Creates a copy of [ChannelTheme] with specified attributes overridden.
@@ -616,7 +601,6 @@ class ChannelTheme {
ChannelHeaderTheme channelHeaderTheme, ChannelHeaderTheme channelHeaderTheme,
IconThemeData messageInputButtonIconTheme, IconThemeData messageInputButtonIconTheme,
ButtonThemeData messageInputButtonTheme, ButtonThemeData messageInputButtonTheme,
Gradient inputGradient,
Color inputBackground, Color inputBackground,
}) => }) =>
ChannelTheme( ChannelTheme(
@@ -633,8 +617,6 @@ class ChannelTheme {
messageInputButtonIconTheme ?? this.messageInputButtonIconTheme, messageInputButtonIconTheme ?? this.messageInputButtonIconTheme,
messageInputButtonTheme: messageInputButtonTheme:
messageInputButtonTheme ?? this.messageInputButtonTheme, messageInputButtonTheme ?? this.messageInputButtonTheme,
inputGradient: inputGradient ?? this.inputGradient,
inputBackground: inputBackground ?? this.inputBackground,
); );
} }
+1 -1
View File
@@ -28,7 +28,7 @@ dependencies:
file_picker: ^2.0.12 file_picker: ^2.0.12
image_picker: ^0.6.7+2 image_picker: ^0.6.7+2
flutter_keyboard_visibility: ^3.3.0 flutter_keyboard_visibility: ^3.3.0
stream_chat: ^0.2.20 stream_chat: ^0.2.21+2
mime: ^0.9.6+3 mime: ^0.9.6+3
video_compress: ^2.1.1 video_compress: ^2.1.1
visibility_detector: ^0.1.5 visibility_detector: ^0.1.5