diff --git a/lib/common/widgets/video_card_h.dart b/lib/common/widgets/video_card_h.dart index 81935b81..690abe7c 100644 --- a/lib/common/widgets/video_card_h.dart +++ b/lib/common/widgets/video_card_h.dart @@ -25,10 +25,14 @@ class VideoCardH extends StatelessWidget { String heroTag = Utils.makeHeroTag(aid); return GestureDetector( onLongPress: () { - longPress!(); + if (longPress != null) { + longPress!(); + } }, onLongPressEnd: (details) { - longPressEnd!(); + if (longPressEnd != null) { + longPressEnd!(); + } }, child: InkWell( onTap: () async { diff --git a/lib/common/widgets/video_card_v.dart b/lib/common/widgets/video_card_v.dart index 12d5fe99..8e182a14 100644 --- a/lib/common/widgets/video_card_v.dart +++ b/lib/common/widgets/video_card_v.dart @@ -32,10 +32,14 @@ class VideoCardV extends StatelessWidget { margin: EdgeInsets.zero, child: GestureDetector( onLongPress: () { - longPress!(); + if (longPress != null) { + longPress!(); + } }, onLongPressEnd: (details) { - longPressEnd!(); + if (longPressEnd != null) { + longPressEnd!(); + } }, child: InkWell( onTap: () async { diff --git a/lib/pages/video/detail/related/controller.dart b/lib/pages/video/detail/related/controller.dart index cb9081dc..20cf3b55 100644 --- a/lib/pages/video/detail/related/controller.dart +++ b/lib/pages/video/detail/related/controller.dart @@ -1,3 +1,4 @@ +import 'package:flutter/material.dart'; import 'package:get/get.dart'; import 'package:pilipala/http/video.dart'; @@ -7,5 +8,7 @@ class ReleatedController extends GetxController { // 推荐视频列表 List relatedVideoList = []; + OverlayEntry? popupDialog; + Future queryRelatedVideo() => VideoHttp.relatedVideoList(aid: aid); } diff --git a/lib/pages/video/detail/related/view.dart b/lib/pages/video/detail/related/view.dart index 3c79ee50..2fc11573 100644 --- a/lib/pages/video/detail/related/view.dart +++ b/lib/pages/video/detail/related/view.dart @@ -1,8 +1,9 @@ import 'package:flutter/material.dart'; import 'package:get/get.dart'; import 'package:pilipala/common/skeleton/video_card_h.dart'; +import 'package:pilipala/common/widgets/animated_dialog.dart'; +import 'package:pilipala/common/widgets/overlay_pop.dart'; import 'package:pilipala/common/widgets/video_card_h.dart'; -import 'package:pilipala/common/widgets/video_card_v.dart'; import './controller.dart'; class RelatedVideoPanel extends StatefulWidget { @@ -31,6 +32,15 @@ class _RelatedVideoPanelState extends State { } else { return VideoCardH( videoItem: snapshot.data['data'][index], + longPress: () { + _releatedController.popupDialog = + _createPopupDialog(snapshot.data['data'][index]); + Overlay.of(context) + .insert(_releatedController.popupDialog!); + }, + longPressEnd: () { + _releatedController.popupDialog?.remove(); + }, ); } }, childCount: snapshot.data['data'].length + 1)); @@ -51,4 +61,12 @@ class _RelatedVideoPanelState extends State { }, ); } + + OverlayEntry _createPopupDialog(videoItem) { + return OverlayEntry( + builder: (context) => AnimatedDialog( + child: OverlayPop(videoItem: videoItem), + ), + ); + } }