This commit is contained in:
Deven Joshi
2020-11-30 19:20:15 +05:30
parent 832e31cbc6
commit 058ecc9a0d
2 changed files with 67 additions and 48 deletions
+11 -3
View File
@@ -63,6 +63,10 @@ class _FullScreenMediaState extends State<FullScreenMedia>
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
var videoAttachments = widget.mediaAttachments
.where((element) => element.type == 'video')
.toList();
return Scaffold( return Scaffold(
resizeToAvoidBottomInset: false, resizeToAvoidBottomInset: false,
body: Stack( body: Stack(
@@ -113,7 +117,10 @@ class _FullScreenMediaState extends State<FullScreenMedia>
); );
} else if (widget.mediaAttachments[position].type == } else if (widget.mediaAttachments[position].type ==
'video') { 'video') {
if (!videoPackages[position].initialised) { var controllerPackage = videoPackages[videoAttachments
.indexOf(widget.mediaAttachments[position])];
if (!controllerPackage.initialised) {
return Center( return Center(
child: CircularProgressIndicator(), child: CircularProgressIndicator(),
); );
@@ -130,7 +137,7 @@ class _FullScreenMediaState extends State<FullScreenMedia>
} }
}, },
child: Chewie( child: Chewie(
controller: videoPackages[position].chewieController, controller: controllerPackage.chewieController,
), ),
); );
} }
@@ -160,8 +167,9 @@ class _FullScreenMediaState extends State<FullScreenMedia>
ImageFooter( ImageFooter(
currentPage: _currentPage, currentPage: _currentPage,
totalPages: widget.mediaAttachments.length, totalPages: widget.mediaAttachments.length,
urls: widget.mediaAttachments, mediaAttachments: widget.mediaAttachments,
message: widget.message, message: widget.message,
videoPackages: videoPackages,
), ),
], ],
), ),
+56 -45
View File
@@ -3,6 +3,7 @@ import 'dart:math';
import 'dart:typed_data'; import 'dart:typed_data';
import 'package:cached_network_image/cached_network_image.dart'; import 'package:cached_network_image/cached_network_image.dart';
import 'package:chewie/chewie.dart';
import 'package:esys_flutter_share/esys_flutter_share.dart'; import 'package:esys_flutter_share/esys_flutter_share.dart';
import 'package:flutter/foundation.dart'; import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
@@ -12,7 +13,6 @@ import 'package:path_provider/path_provider.dart';
import 'package:stream_chat/stream_chat.dart'; import 'package:stream_chat/stream_chat.dart';
import 'package:stream_chat_flutter/src/stream_chat.dart'; import 'package:stream_chat_flutter/src/stream_chat.dart';
import 'package:stream_chat_flutter/src/stream_chat_theme.dart'; import 'package:stream_chat_flutter/src/stream_chat_theme.dart';
import 'package:stream_chat_flutter/src/user_avatar.dart';
import 'package:stream_chat_flutter/stream_chat_flutter.dart'; import 'package:stream_chat_flutter/stream_chat_flutter.dart';
import 'stream_channel.dart'; import 'stream_channel.dart';
@@ -31,9 +31,11 @@ class ImageFooter extends StatefulWidget {
final int currentPage; final int currentPage;
final int totalPages; final int totalPages;
final List<Attachment> urls; final List<Attachment> mediaAttachments;
final Message message; final Message message;
final List<VideoPackage> videoPackages;
/// Creates a channel header /// Creates a channel header
ImageFooter({ ImageFooter({
Key key, Key key,
@@ -42,8 +44,9 @@ class ImageFooter extends StatefulWidget {
this.onImageTap, this.onImageTap,
this.currentPage = 0, this.currentPage = 0,
this.totalPages = 0, this.totalPages = 0,
this.urls, this.mediaAttachments,
this.message, this.message,
this.videoPackages,
}) : preferredSize = Size.fromHeight(kToolbarHeight), }) : preferredSize = Size.fromHeight(kToolbarHeight),
super(key: key); super(key: key);
@@ -55,7 +58,6 @@ class ImageFooter extends StatefulWidget {
} }
class _ImageFooterState extends State<ImageFooter> { class _ImageFooterState extends State<ImageFooter> {
Future<QueryUsersResponse> _userQuery;
bool _userSearchMode = false; bool _userSearchMode = false;
TextEditingController _searchController = TextEditingController(); TextEditingController _searchController = TextEditingController();
TextEditingController _messageController = TextEditingController(); TextEditingController _messageController = TextEditingController();
@@ -63,12 +65,6 @@ class _ImageFooterState extends State<ImageFooter> {
Set<User> _selectedUsers = {}; Set<User> _selectedUsers = {};
bool _loading = false; bool _loading = false;
@override
void initState() {
super.initState();
_userQuery = _queryUsers(context);
}
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return SafeArea( return SafeArea(
@@ -123,6 +119,10 @@ class _ImageFooterState extends State<ImageFooter> {
} }
Widget _buildPhotosModal(context) { Widget _buildPhotosModal(context) {
var videoAttachments = widget.mediaAttachments
.where((element) => element.type == 'video')
.toList();
showModalBottomSheet( showModalBottomSheet(
context: context, context: context,
shape: RoundedRectangleBorder( shape: RoundedRectangleBorder(
@@ -174,20 +174,33 @@ class _ImageFooterState extends State<ImageFooter> {
shrinkWrap: true, shrinkWrap: true,
physics: NeverScrollableScrollPhysics(), physics: NeverScrollableScrollPhysics(),
itemBuilder: (context, position) { itemBuilder: (context, position) {
return Padding( if (widget.mediaAttachments[position].type == 'video') {
padding: const EdgeInsets.all(1.0), var controllerPackage = widget.videoPackages[
child: AspectRatio( videoAttachments
child: CachedNetworkImage( .indexOf(widget.mediaAttachments[position])];
imageUrl: widget.urls[position].imageUrl ??
widget.urls[position].assetUrl ?? return FittedBox(
widget.urls[position].thumbUrl, child: Chewie(
fit: BoxFit.cover, controller: controllerPackage.chewieController,
), ),
aspectRatio: 1.0, );
), } else {
); return Padding(
padding: const EdgeInsets.all(1.0),
child: AspectRatio(
child: CachedNetworkImage(
imageUrl:
widget.mediaAttachments[position].imageUrl ??
widget.mediaAttachments[position].assetUrl ??
widget.mediaAttachments[position].thumbUrl,
fit: BoxFit.cover,
),
aspectRatio: 1.0,
),
);
}
}, },
itemCount: widget.urls.length, itemCount: widget.mediaAttachments.length,
gridDelegate: SliverGridDelegateWithFixedCrossAxisCount( gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
crossAxisCount: 3), crossAxisCount: 3),
), ),
@@ -206,7 +219,12 @@ class _ImageFooterState extends State<ImageFooter> {
builder: (context) { builder: (context) {
return StatefulBuilder(builder: (context, modalSetState) { return StatefulBuilder(builder: (context, modalSetState) {
return Padding( return Padding(
padding: const EdgeInsets.only(top: 16.0, left: 8.0, right: 8.0), padding: EdgeInsets.only(
top: _userSearchMode
? 16.0
: MediaQuery.of(context).size.height / 2,
left: 8.0,
right: 8.0),
child: Material( child: Material(
borderRadius: BorderRadius.only( borderRadius: BorderRadius.only(
topLeft: Radius.circular(16.0), topLeft: Radius.circular(16.0),
@@ -233,7 +251,7 @@ class _ImageFooterState extends State<ImageFooter> {
}); });
} }
}, },
crossAxisCount: 3, crossAxisCount: 4,
pagination: PaginationParams( pagination: PaginationParams(
limit: 25, limit: 25,
), ),
@@ -295,12 +313,18 @@ class _ImageFooterState extends State<ImageFooter> {
child: InkWell( child: InkWell(
onTap: () async { onTap: () async {
var url = widget var url = widget
.urls[widget.currentPage].imageUrl ?? .mediaAttachments[widget.currentPage]
.imageUrl ??
widget widget
.urls[widget.currentPage].assetUrl ?? .mediaAttachments[widget.currentPage]
widget.urls[widget.currentPage].thumbUrl; .assetUrl ??
widget
.mediaAttachments[widget.currentPage]
.thumbUrl;
if (widget.urls[widget.currentPage].type == if (widget
.mediaAttachments[widget.currentPage]
.type ==
'video') { 'video') {
await _saveVideo(url); await _saveVideo(url);
Navigator.pop(context); Navigator.pop(context);
@@ -437,9 +461,10 @@ class _ImageFooterState extends State<ImageFooter> {
color: Colors.black, color: Colors.black,
), ),
onPressed: () async { onPressed: () async {
var url = widget.urls[widget.currentPage].imageUrl ?? var url =
widget.urls[widget.currentPage].assetUrl ?? widget.mediaAttachments[widget.currentPage].imageUrl ??
widget.urls[widget.currentPage].thumbUrl; widget.mediaAttachments[widget.currentPage].assetUrl ??
widget.mediaAttachments[widget.currentPage].thumbUrl;
var type = url?.split('?')?.first?.split('.')?.last ?? 'jpg'; var type = url?.split('?')?.first?.split('.')?.last ?? 'jpg';
var request = await HttpClient().getUrl(Uri.parse(url)); var request = await HttpClient().getUrl(Uri.parse(url));
var response = await request.close(); var response = await request.close();
@@ -533,20 +558,6 @@ class _ImageFooterState extends State<ImageFooter> {
); );
} }
Future<QueryUsersResponse> _queryUsers(context) {
return StreamChat.of(context).client.queryUsers(
pagination: PaginationParams(
limit: 25,
),
sort: [
SortOption(
'name',
direction: SortOption.ASC,
),
],
);
}
/// Sends the current message /// Sends the current message
Future sendMessage() async { Future sendMessage() async {
var text = _messageController.text.trim(); var text = _messageController.text.trim();