Browse Source

fix image zooming

Veloe 2 weeks ago
parent
commit
2ecf352d73
3 changed files with 19 additions and 11 deletions
  1. 8 5
      lib/pages/media_carousel_screen
  2. 10 5
      lib/pages/widgets/video_player_widget.dart
  3. 1 1
      pubspec.yaml

+ 8 - 5
lib/pages/media_carousel_screen

@@ -2,7 +2,7 @@ import 'package:flutter/material.dart';
 import 'package:photo_view/photo_view.dart';
 import 'package:flutter_cache_manager/flutter_cache_manager.dart';
 import 'package:cached_network_image/cached_network_image.dart';
-import 'package:veloe_kemono_party_flutter/pages/widgets/video_player_widget';
+import 'package:veloe_kemono_party_flutter/pages/widgets/video_player_widget.dart';
 import 'package:path_provider/path_provider.dart';
 import 'package:permission_handler/permission_handler.dart';
 import 'package:gallery_saver_plus/gallery_saver.dart';
@@ -106,10 +106,13 @@ class _MediaCarouselScreenState extends State<MediaCarouselScreen> {
                         ),
                       ),
                     ),
-                    child:PhotoView(
+                    child:PhotoViewGestureDetectorScope(
+                      axis: Axis.horizontal,
+                      child: PhotoView(
                         imageProvider: provider,
                         backgroundDecoration: const BoxDecoration(color: Colors.black),
-                  ));
+                      ),
+                    ));
                 } else {
                   return VideoPlayerWidget(videoUrl: item.url);
                 }
@@ -169,8 +172,8 @@ class _MediaCarouselScreenState extends State<MediaCarouselScreen> {
     List<MediaCarouselItem> items = [];
     for (int i = 0; i < posts.length; i++) {
       final post = posts[i];
-      for (int j = 0; j < post.attachments.length; j++) {
-        final attachment = post.attachments[j];
+      for (int j = 0; j < post.mediaAttachments.length; j++) {
+        final attachment = post.mediaAttachments[j];
         if (attachment.isImage || attachment.isVideo)
           items.add(
             MediaCarouselItem(

+ 10 - 5
lib/pages/widgets/video_player_widget → lib/pages/widgets/video_player_widget.dart

@@ -19,6 +19,7 @@ class VideoPlayerWidget extends StatefulWidget {
 class _VideoPlayerWidgetState extends State<VideoPlayerWidget> {
   late final CachedVideoPlayerPlus _player;
   bool _isInitialized = false;
+  bool _isDisposed = false;
   bool _hasError = false;
   bool _usingCache = false;
   double _downloadProgress = 0;
@@ -45,11 +46,13 @@ class _VideoPlayerWidgetState extends State<VideoPlayerWidget> {
       );
       
       await _player.initialize();
+      if (_isDisposed)
+        return;
       _player.controller.addListener(_videoListener);
       setState(() => _isInitialized = true);
       _player.controller.play();
     } catch (e) {
-      _handleError("Player init error: $e");
+    _handleError("Player init error: $e");
     }
   }
 
@@ -64,7 +67,7 @@ class _VideoPlayerWidgetState extends State<VideoPlayerWidget> {
     // Handle buffering updates
     final isBuffering = _player.controller.value.isBuffering;
     if (isBuffering != _isBuffering) {
-      setState(() => _isBuffering = isBuffering);
+      //setState(() => _isBuffering = isBuffering);
     }
   }
 
@@ -232,7 +235,7 @@ class _VideoPlayerWidgetState extends State<VideoPlayerWidget> {
   }
 
   Future<void> _handleVisibilityChange(bool visible) async {
-    if (!visible) {
+    if (!visible && _isInitialized && !_isDisposed) {
       await _player.controller.pause();
     }
   }
@@ -345,8 +348,10 @@ class _VideoPlayerWidgetState extends State<VideoPlayerWidget> {
   @override
   void dispose() {
     _hideTimer?.cancel();
-    _player.controller.removeListener(_videoListener);
-    _player.dispose();
+    if (_isInitialized)
+      _player?.controller?.removeListener(_videoListener);
+    _isDisposed = true;
+    _player?.dispose();
     super.dispose();
   }
 }

+ 1 - 1
pubspec.yaml

@@ -16,7 +16,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev
 # https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html
 # In Windows, build-name is used as the major, minor, and patch parts
 # of the product and file versions while build-number is used as the build suffix.
-version: 1.0.9
+version: 1.0.10
 
 environment:
   sdk: ^3.7.2