102 lines
3.3 KiB
Dart
102 lines
3.3 KiB
Dart
import 'dart:convert';
|
|
import 'dart:io';
|
|
import 'dart:typed_data';
|
|
|
|
import 'package:flutter/material.dart';
|
|
import 'package:provider/provider.dart';
|
|
import 'package:sendtrain/daos/media_items_dao.dart';
|
|
import 'package:sendtrain/database/database.dart';
|
|
import 'package:sendtrain/helpers/widget_helpers.dart';
|
|
import 'package:sendtrain/widgets/builders/dialogs.dart';
|
|
import 'package:video_player/video_player.dart';
|
|
|
|
class MediaCard extends StatefulWidget {
|
|
const MediaCard({super.key, required this.media, this.callback});
|
|
|
|
final MediaItem media;
|
|
final Function? callback;
|
|
|
|
@override
|
|
State<MediaCard> createState() => _MediaCardState();
|
|
}
|
|
|
|
class _MediaCardState extends State<MediaCard> {
|
|
// late VideoPlayerController _controller;
|
|
late MediaItem media;
|
|
late Function? callback;
|
|
|
|
@override
|
|
void initState() {
|
|
super.initState();
|
|
media = widget.media;
|
|
callback = widget.callback;
|
|
// _controller = VideoPlayerController.asset(dataSource)
|
|
// ..initialize().then((_) {
|
|
// setState(() {}); //when your thumbnail will show.
|
|
// });
|
|
}
|
|
|
|
// @override
|
|
// void dispose() {
|
|
// super.dispose();
|
|
// _controller.dispose();
|
|
// }
|
|
|
|
// Future<VideoPlayerController> createVideoPlayer() async {
|
|
// final File file =
|
|
// await ImgB64Decoder.fileFromB64String(widget.encodedBytes);
|
|
// final VideoPlayerController controller = VideoPlayerController.file(file);
|
|
// await controller.initialize();
|
|
// await controller.setLooping(true);
|
|
// return controller;
|
|
// }
|
|
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
DecorationImage mediaImage(MediaItem media) {
|
|
dynamic image;
|
|
|
|
if (media.type == MediaType.image || media.type == MediaType.location) {
|
|
image = NetworkImage(media.reference);
|
|
} else if (media.type == MediaType.localImage) {
|
|
image = Image.memory(base64Decode(media.reference)).image;
|
|
} else if (media.type == MediaType.youtube) {
|
|
image =
|
|
NetworkImage('https://img.youtube.com/vi/${media.reference}/0.jpg');
|
|
} else if (media.type == MediaType.localVideo) {
|
|
|
|
}
|
|
|
|
return DecorationImage(image: image, fit: BoxFit.cover);
|
|
}
|
|
|
|
return Container(
|
|
decoration: BoxDecoration(
|
|
borderRadius: BorderRadius.circular(10),
|
|
image: mediaImage(media),
|
|
),
|
|
child: Card(
|
|
color: Colors.transparent,
|
|
shape:
|
|
RoundedRectangleBorder(borderRadius: BorderRadius.circular(10)),
|
|
shadowColor: const Color.fromARGB(0, 255, 255, 255),
|
|
child: TextButton(
|
|
onLongPress: () => showRemovalDialog(
|
|
'Media Removal',
|
|
'Would you like to permanently remove this media from the current session?',
|
|
context,
|
|
MediaItemsDao(Provider.of<AppDatabase>(context,
|
|
listen: false)),
|
|
media)
|
|
.then((result) {
|
|
if (callback != null) {
|
|
callback!();
|
|
}
|
|
}),
|
|
onPressed: () => showMediaDetailWidget(context, media),
|
|
child: const ListTile(
|
|
title: Text(''),
|
|
))));
|
|
}
|
|
}
|