fix: Fixed picture flickering

This commit is contained in:
Deven Joshi
2020-11-09 14:50:09 +05:30
parent a06b7c2cd8
commit 909587a127
+15 -20
View File
@@ -177,6 +177,8 @@ class MessageInputState extends State<MessageInput> {
int _filePickerIndex = 0; int _filePickerIndex = 0;
double _filePickerSize = 250.0; double _filePickerSize = 250.0;
Tuple2<List<Medium>, List<dynamic>> _mediaData = Tuple2([], []);
/// The editing controller passed to the input TextField /// The editing controller passed to the input TextField
TextEditingController textEditingController; TextEditingController textEditingController;
@@ -637,17 +639,8 @@ class MessageInputState extends State<MessageInput> {
Widget _buildPickerSection() { Widget _buildPickerSection() {
switch (_filePickerIndex) { switch (_filePickerIndex) {
case 0: case 0:
return FutureBuilder(
future: _getAllMedia(),
builder: (context, mediaData) {
if (!mediaData.hasData) {
return Center(
child: CircularProgressIndicator(),
);
}
return GridView.builder( return GridView.builder(
itemCount: mediaData.data.item2.length, itemCount: _mediaData.item2.length,
gridDelegate: SliverGridDelegateWithFixedCrossAxisCount( gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
crossAxisCount: 3), crossAxisCount: 3),
itemBuilder: (context, position) { itemBuilder: (context, position) {
@@ -660,15 +653,15 @@ class MessageInputState extends State<MessageInput> {
AspectRatio( AspectRatio(
aspectRatio: 1.0, aspectRatio: 1.0,
child: Image.memory( child: Image.memory(
mediaData.data.item2[position], _mediaData.item2[position],
fit: mediaData.data.item1[position].height > fit: _mediaData.item1[position].height >
mediaData.data.item1[position].width _mediaData.item1[position].width
? BoxFit.fitWidth ? BoxFit.fitWidth
: BoxFit.fitHeight, : BoxFit.fitHeight,
), ),
), ),
if (_attachments.any((element) => if (_attachments.any((element) =>
element.id == mediaData.data.item1[position].id)) element.id == _mediaData.item1[position].id))
Container( Container(
color: Colors.black.withOpacity(0.5), color: Colors.black.withOpacity(0.5),
child: Center( child: Center(
@@ -683,11 +676,11 @@ class MessageInputState extends State<MessageInput> {
), ),
onTap: () { onTap: () {
if (!_attachments.any((element) => if (!_attachments.any((element) =>
element.id == mediaData.data.item1[position].id)) { element.id == _mediaData.item1[position].id)) {
_addAttachment(mediaData.data.item1[position]); _addAttachment(_mediaData.item1[position]);
} else { } else {
_attachments.removeWhere((element) => _attachments.removeWhere((element) =>
element.id == mediaData.data.item1[position].id); element.id == _mediaData.item1[position].id);
setState(() {}); setState(() {});
} }
}, },
@@ -695,7 +688,6 @@ class MessageInputState extends State<MessageInput> {
); );
}, },
); );
});
break; break;
case 1: case 1:
break; break;
@@ -760,7 +752,7 @@ class MessageInputState extends State<MessageInput> {
}); });
} }
Future<Tuple2<List<Medium>, List<dynamic>>> _getAllMedia() async { void _getAllMedia() async {
var allAlbums = await PhotoGallery.listAlbums(mediumType: MediumType.image); var allAlbums = await PhotoGallery.listAlbums(mediumType: MediumType.image);
//var allVideoAlbums = await PhotoGallery.listAlbums(mediumType: MediumType.video); //var allVideoAlbums = await PhotoGallery.listAlbums(mediumType: MediumType.video);
List<Medium> resultList = []; List<Medium> resultList = [];
@@ -782,7 +774,9 @@ class MessageInputState extends State<MessageInput> {
resultThumbnailList.add(await PhotoGallery.getThumbnail(mediumId: e.id)); resultThumbnailList.add(await PhotoGallery.getThumbnail(mediumId: e.id));
} }
return Tuple2<List<Medium>, List<dynamic>>(resultList, resultThumbnailList); setState(() {
_mediaData = Tuple2<List<Medium>, List<dynamic>>(resultList, resultThumbnailList);
});
} }
OverlayEntry _buildMentionsOverlayEntry() { OverlayEntry _buildMentionsOverlayEntry() {
@@ -1051,6 +1045,7 @@ class MessageInputState extends State<MessageInput> {
_filePickerSize = 250.0; _filePickerSize = 250.0;
}); });
} else { } else {
_getAllMedia();
showAttachmentModal(); showAttachmentModal();
} }
}, },