fixes
This commit is contained in:
@@ -63,6 +63,10 @@ class _FullScreenMediaState extends State<FullScreenMedia>
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
var videoAttachments = widget.mediaAttachments
|
||||
.where((element) => element.type == 'video')
|
||||
.toList();
|
||||
|
||||
return Scaffold(
|
||||
resizeToAvoidBottomInset: false,
|
||||
body: Stack(
|
||||
@@ -113,7 +117,10 @@ class _FullScreenMediaState extends State<FullScreenMedia>
|
||||
);
|
||||
} else if (widget.mediaAttachments[position].type ==
|
||||
'video') {
|
||||
if (!videoPackages[position].initialised) {
|
||||
var controllerPackage = videoPackages[videoAttachments
|
||||
.indexOf(widget.mediaAttachments[position])];
|
||||
|
||||
if (!controllerPackage.initialised) {
|
||||
return Center(
|
||||
child: CircularProgressIndicator(),
|
||||
);
|
||||
@@ -130,7 +137,7 @@ class _FullScreenMediaState extends State<FullScreenMedia>
|
||||
}
|
||||
},
|
||||
child: Chewie(
|
||||
controller: videoPackages[position].chewieController,
|
||||
controller: controllerPackage.chewieController,
|
||||
),
|
||||
);
|
||||
}
|
||||
@@ -160,8 +167,9 @@ class _FullScreenMediaState extends State<FullScreenMedia>
|
||||
ImageFooter(
|
||||
currentPage: _currentPage,
|
||||
totalPages: widget.mediaAttachments.length,
|
||||
urls: widget.mediaAttachments,
|
||||
mediaAttachments: widget.mediaAttachments,
|
||||
message: widget.message,
|
||||
videoPackages: videoPackages,
|
||||
),
|
||||
],
|
||||
),
|
||||
|
||||
+56
-45
@@ -3,6 +3,7 @@ import 'dart:math';
|
||||
import 'dart:typed_data';
|
||||
|
||||
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:flutter/foundation.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_flutter/src/stream_chat.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 'stream_channel.dart';
|
||||
@@ -31,9 +31,11 @@ class ImageFooter extends StatefulWidget {
|
||||
final int currentPage;
|
||||
final int totalPages;
|
||||
|
||||
final List<Attachment> urls;
|
||||
final List<Attachment> mediaAttachments;
|
||||
final Message message;
|
||||
|
||||
final List<VideoPackage> videoPackages;
|
||||
|
||||
/// Creates a channel header
|
||||
ImageFooter({
|
||||
Key key,
|
||||
@@ -42,8 +44,9 @@ class ImageFooter extends StatefulWidget {
|
||||
this.onImageTap,
|
||||
this.currentPage = 0,
|
||||
this.totalPages = 0,
|
||||
this.urls,
|
||||
this.mediaAttachments,
|
||||
this.message,
|
||||
this.videoPackages,
|
||||
}) : preferredSize = Size.fromHeight(kToolbarHeight),
|
||||
super(key: key);
|
||||
|
||||
@@ -55,7 +58,6 @@ class ImageFooter extends StatefulWidget {
|
||||
}
|
||||
|
||||
class _ImageFooterState extends State<ImageFooter> {
|
||||
Future<QueryUsersResponse> _userQuery;
|
||||
bool _userSearchMode = false;
|
||||
TextEditingController _searchController = TextEditingController();
|
||||
TextEditingController _messageController = TextEditingController();
|
||||
@@ -63,12 +65,6 @@ class _ImageFooterState extends State<ImageFooter> {
|
||||
Set<User> _selectedUsers = {};
|
||||
bool _loading = false;
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
super.initState();
|
||||
_userQuery = _queryUsers(context);
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return SafeArea(
|
||||
@@ -123,6 +119,10 @@ class _ImageFooterState extends State<ImageFooter> {
|
||||
}
|
||||
|
||||
Widget _buildPhotosModal(context) {
|
||||
var videoAttachments = widget.mediaAttachments
|
||||
.where((element) => element.type == 'video')
|
||||
.toList();
|
||||
|
||||
showModalBottomSheet(
|
||||
context: context,
|
||||
shape: RoundedRectangleBorder(
|
||||
@@ -174,20 +174,33 @@ class _ImageFooterState extends State<ImageFooter> {
|
||||
shrinkWrap: true,
|
||||
physics: NeverScrollableScrollPhysics(),
|
||||
itemBuilder: (context, position) {
|
||||
return Padding(
|
||||
padding: const EdgeInsets.all(1.0),
|
||||
child: AspectRatio(
|
||||
child: CachedNetworkImage(
|
||||
imageUrl: widget.urls[position].imageUrl ??
|
||||
widget.urls[position].assetUrl ??
|
||||
widget.urls[position].thumbUrl,
|
||||
fit: BoxFit.cover,
|
||||
if (widget.mediaAttachments[position].type == 'video') {
|
||||
var controllerPackage = widget.videoPackages[
|
||||
videoAttachments
|
||||
.indexOf(widget.mediaAttachments[position])];
|
||||
|
||||
return FittedBox(
|
||||
child: Chewie(
|
||||
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(
|
||||
crossAxisCount: 3),
|
||||
),
|
||||
@@ -206,7 +219,12 @@ class _ImageFooterState extends State<ImageFooter> {
|
||||
builder: (context) {
|
||||
return StatefulBuilder(builder: (context, modalSetState) {
|
||||
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(
|
||||
borderRadius: BorderRadius.only(
|
||||
topLeft: Radius.circular(16.0),
|
||||
@@ -233,7 +251,7 @@ class _ImageFooterState extends State<ImageFooter> {
|
||||
});
|
||||
}
|
||||
},
|
||||
crossAxisCount: 3,
|
||||
crossAxisCount: 4,
|
||||
pagination: PaginationParams(
|
||||
limit: 25,
|
||||
),
|
||||
@@ -295,12 +313,18 @@ class _ImageFooterState extends State<ImageFooter> {
|
||||
child: InkWell(
|
||||
onTap: () async {
|
||||
var url = widget
|
||||
.urls[widget.currentPage].imageUrl ??
|
||||
.mediaAttachments[widget.currentPage]
|
||||
.imageUrl ??
|
||||
widget
|
||||
.urls[widget.currentPage].assetUrl ??
|
||||
widget.urls[widget.currentPage].thumbUrl;
|
||||
.mediaAttachments[widget.currentPage]
|
||||
.assetUrl ??
|
||||
widget
|
||||
.mediaAttachments[widget.currentPage]
|
||||
.thumbUrl;
|
||||
|
||||
if (widget.urls[widget.currentPage].type ==
|
||||
if (widget
|
||||
.mediaAttachments[widget.currentPage]
|
||||
.type ==
|
||||
'video') {
|
||||
await _saveVideo(url);
|
||||
Navigator.pop(context);
|
||||
@@ -437,9 +461,10 @@ class _ImageFooterState extends State<ImageFooter> {
|
||||
color: Colors.black,
|
||||
),
|
||||
onPressed: () async {
|
||||
var url = widget.urls[widget.currentPage].imageUrl ??
|
||||
widget.urls[widget.currentPage].assetUrl ??
|
||||
widget.urls[widget.currentPage].thumbUrl;
|
||||
var url =
|
||||
widget.mediaAttachments[widget.currentPage].imageUrl ??
|
||||
widget.mediaAttachments[widget.currentPage].assetUrl ??
|
||||
widget.mediaAttachments[widget.currentPage].thumbUrl;
|
||||
var type = url?.split('?')?.first?.split('.')?.last ?? 'jpg';
|
||||
var request = await HttpClient().getUrl(Uri.parse(url));
|
||||
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
|
||||
Future sendMessage() async {
|
||||
var text = _messageController.text.trim();
|
||||
|
||||
Reference in New Issue
Block a user