image_grid.dart 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. import 'package:chewie/chewie.dart';
  2. import 'package:flutter/material.dart';
  3. import 'package:immich_mobile/modules/home/ui/thumbnail_image.dart';
  4. import 'package:immich_mobile/shared/models/immich_asset.model.dart';
  5. import 'package:video_player/video_player.dart';
  6. class ImageGrid extends StatelessWidget {
  7. final List<ImmichAsset> assetGroup;
  8. const ImageGrid({Key? key, required this.assetGroup}) : super(key: key);
  9. @override
  10. Widget build(BuildContext context) {
  11. return SliverGrid(
  12. gridDelegate:
  13. const SliverGridDelegateWithFixedCrossAxisCount(crossAxisCount: 3, crossAxisSpacing: 5.0, mainAxisSpacing: 5),
  14. delegate: SliverChildBuilderDelegate(
  15. (BuildContext context, int index) {
  16. var assetType = assetGroup[index].type;
  17. return GestureDetector(
  18. onTap: () {},
  19. child: assetType == 'IMAGE'
  20. ? ThumbnailImage(asset: assetGroup[index])
  21. : VideoThumbnailPlayer(key: Key(assetGroup[index].id), videoAsset: assetGroup[index]),
  22. );
  23. },
  24. childCount: assetGroup.length,
  25. ),
  26. );
  27. }
  28. }
  29. class VideoThumbnailPlayer extends StatefulWidget {
  30. ImmichAsset videoAsset;
  31. VideoThumbnailPlayer({Key? key, required this.videoAsset}) : super(key: key);
  32. @override
  33. State<VideoThumbnailPlayer> createState() => _VideoThumbnailPlayerState();
  34. }
  35. class _VideoThumbnailPlayerState extends State<VideoThumbnailPlayer> {
  36. late VideoPlayerController videoPlayerController;
  37. ChewieController? chewieController;
  38. @override
  39. void initState() {
  40. super.initState();
  41. initializePlayer();
  42. }
  43. Future<void> initializePlayer() async {
  44. videoPlayerController =
  45. VideoPlayerController.network('https://flutter.github.io/assets-for-api-docs/assets/videos/butterfly.mp4');
  46. await Future.wait([
  47. videoPlayerController.initialize(),
  48. ]);
  49. _createChewieController();
  50. setState(() {});
  51. }
  52. _createChewieController() {
  53. chewieController = ChewieController(
  54. showControlsOnInitialize: false,
  55. videoPlayerController: videoPlayerController,
  56. autoPlay: true,
  57. looping: true,
  58. );
  59. }
  60. @override
  61. Widget build(BuildContext context) {
  62. return chewieController != null && chewieController!.videoPlayerController.value.isInitialized
  63. ? SizedBox(
  64. height: 300,
  65. width: 300,
  66. child: Chewie(
  67. controller: chewieController!,
  68. ),
  69. )
  70. : const Text("Loading Video");
  71. }
  72. }