diff --git a/lib/pages/bangumi/introduction/view.dart b/lib/pages/bangumi/introduction/view.dart index f15340e4b..44f749de2 100644 --- a/lib/pages/bangumi/introduction/view.dart +++ b/lib/pages/bangumi/introduction/view.dart @@ -17,7 +17,6 @@ import 'package:PiliPlus/pages/bangumi/widgets/bangumi_panel.dart'; import 'package:PiliPlus/pages/video/detail/index.dart'; import 'package:PiliPlus/pages/video/detail/introduction/widgets/action_item.dart'; import 'package:PiliPlus/pages/video/detail/introduction/widgets/action_row_item.dart'; -import 'package:PiliPlus/pages/video/detail/introduction/widgets/fav_panel.dart'; import 'package:PiliPlus/utils/feed_back.dart'; import '../../../utils/utils.dart'; @@ -185,42 +184,13 @@ class _BangumiInfoState extends State if (type == 'tap') { bangumiIntroController.actionFavVideo(type: 'default'); } else { - _showFavBottomSheet(); + Utils.showFavBottomSheet(context: context, ctr: bangumiIntroController); } } else if (type != 'longPress') { - _showFavBottomSheet(); + Utils.showFavBottomSheet(context: context, ctr: bangumiIntroController); } } - _showFavBottomSheet() { - showModalBottomSheet( - context: context, - useSafeArea: true, - isScrollControlled: true, - transitionAnimationController: AnimationController( - duration: const Duration(milliseconds: 200), - vsync: this, - ), - sheetAnimationStyle: AnimationStyle(curve: Curves.ease), - builder: (BuildContext context) { - return DraggableScrollableSheet( - minChildSize: 0, - maxChildSize: 1, - initialChildSize: 0.7, - snap: true, - expand: false, - snapSizes: const [0.7], - builder: (BuildContext context, ScrollController scrollController) { - return FavPanel( - ctr: bangumiIntroController, - scrollController: scrollController, - ); - }, - ); - }, - ); - } - // 视频介绍 showIntroDetail() { feedBack(); diff --git a/lib/pages/video/detail/introduction/view.dart b/lib/pages/video/detail/introduction/view.dart index 20ee09b69..bb9c4ca1d 100644 --- a/lib/pages/video/detail/introduction/view.dart +++ b/lib/pages/video/detail/introduction/view.dart @@ -27,7 +27,6 @@ import 'package:material_design_icons_flutter/material_design_icons_flutter.dart import 'widgets/action_item.dart'; import 'widgets/action_row_item.dart'; -import 'widgets/fav_panel.dart'; import 'widgets/page.dart'; import 'widgets/season.dart'; @@ -244,33 +243,6 @@ class _VideoInfoState extends State with TickerProviderStateMixin { } } - void _showFavBottomSheet() => showModalBottomSheet( - context: context, - useSafeArea: true, - isScrollControlled: true, - transitionAnimationController: AnimationController( - duration: const Duration(milliseconds: 200), - vsync: this, - ), - sheetAnimationStyle: AnimationStyle(curve: Curves.ease), - builder: (BuildContext context) { - return DraggableScrollableSheet( - minChildSize: 0, - maxChildSize: 1, - initialChildSize: 0.7, - snap: true, - expand: false, - snapSizes: const [0.7], - builder: (BuildContext context, ScrollController scrollController) { - return FavPanel( - ctr: videoIntroController, - scrollController: scrollController, - ); - }, - ); - }, - ); - // 收藏 showFavBottomSheet({type = 'tap'}) { if (videoIntroController.userInfo == null) { @@ -284,10 +256,10 @@ class _VideoInfoState extends State with TickerProviderStateMixin { if (type == 'tap') { videoIntroController.actionFavVideo(type: 'default'); } else { - _showFavBottomSheet(); + Utils.showFavBottomSheet(context: context, ctr: videoIntroController); } } else if (type != 'longPress') { - _showFavBottomSheet(); + Utils.showFavBottomSheet(context: context, ctr: videoIntroController); } } diff --git a/lib/pages/video/detail/introduction/widgets/fav_panel.dart b/lib/pages/video/detail/introduction/widgets/fav_panel.dart index 925107370..431124130 100644 --- a/lib/pages/video/detail/introduction/widgets/fav_panel.dart +++ b/lib/pages/video/detail/introduction/widgets/fav_panel.dart @@ -26,7 +26,7 @@ class _FavPanelState extends State { @override void initState() { super.initState(); - _futureBuilderFuture = widget.ctr!.queryVideoInFolder(); + _futureBuilderFuture = widget.ctr.queryVideoInFolder(); } @override @@ -98,7 +98,7 @@ class _FavPanelState extends State { isSliver: false, callback: () => setState(() { _futureBuilderFuture = - widget.ctr!.queryVideoInFolder(); + widget.ctr.queryVideoInFolder(); }), ); } @@ -108,33 +108,33 @@ class _FavPanelState extends State { () => ListView.builder( controller: widget.scrollController, itemCount: - widget.ctr!.favFolderData.value.list!.length, + widget.ctr.favFolderData.value.list.length, itemBuilder: (context, index) { return ListTile( - onTap: () => widget.ctr!.onChoose( - widget.ctr!.favFolderData.value.list![index] + onTap: () => widget.ctr.onChoose( + widget.ctr.favFolderData.value.list[index] .favState != 1, index), dense: true, - leading: Utils.isPublic(widget.ctr! - .favFolderData.value.list![index].attr) + leading: Utils.isPublic(widget.ctr.favFolderData + .value.list[index].attr) ? const Icon(Icons.folder_outlined) : const Icon(Icons.lock_outline), minLeadingWidth: 0, - title: Text(widget.ctr!.favFolderData.value - .list![index].title!), + title: Text(widget.ctr.favFolderData.value + .list[index].title!), subtitle: Text( - '${widget.ctr!.favFolderData.value.list![index].mediaCount}个内容 . ${Utils.isPublicText(widget.ctr!.favFolderData.value.list![index].attr)}', + '${widget.ctr.favFolderData.value.list[index].mediaCount}个内容 . ${Utils.isPublicText(widget.ctr.favFolderData.value.list[index].attr)}', ), trailing: Transform.scale( scale: 0.9, child: Checkbox( - value: widget.ctr!.favFolderData.value - .list![index].favState == + value: widget.ctr.favFolderData.value + .list[index].favState == 1, - onChanged: (bool? checkValue) => widget.ctr! - .onChoose(checkValue!, index), + onChanged: (bool? checkValue) => + widget.ctr.onChoose(checkValue!, index), ), ), ); @@ -149,7 +149,7 @@ class _FavPanelState extends State { errMsg: data['msg'], callback: () => setState(() { _futureBuilderFuture = - widget.ctr!.queryVideoInFolder(); + widget.ctr.queryVideoInFolder(); }), ) ], @@ -198,7 +198,7 @@ class _FavPanelState extends State { FilledButton.tonal( onPressed: () async { feedBack(); - await widget.ctr!.actionFavVideo(); + await widget.ctr.actionFavVideo(); }, style: FilledButton.styleFrom( padding: const EdgeInsets.symmetric( diff --git a/lib/utils/utils.dart b/lib/utils/utils.dart index 898af92cb..0bc7e4038 100644 --- a/lib/utils/utils.dart +++ b/lib/utils/utils.dart @@ -15,6 +15,7 @@ import 'package:PiliPlus/models/bangumi/info.dart'; import 'package:PiliPlus/models/common/search_type.dart'; import 'package:PiliPlus/models/dynamics/result.dart'; import 'package:PiliPlus/models/live/item.dart'; +import 'package:PiliPlus/pages/video/detail/introduction/widgets/fav_panel.dart'; import 'package:PiliPlus/pages/video/detail/introduction/widgets/group_panel.dart'; import 'package:PiliPlus/utils/extension.dart'; import 'package:PiliPlus/utils/feed_back.dart'; @@ -38,6 +39,34 @@ class Utils { static const channel = MethodChannel("PiliPlus"); + static void showFavBottomSheet({ + required BuildContext context, + required dynamic ctr, + }) { + showModalBottomSheet( + context: context, + useSafeArea: true, + isScrollControlled: true, + sheetAnimationStyle: AnimationStyle(curve: Curves.ease), + builder: (BuildContext context) { + return DraggableScrollableSheet( + minChildSize: 0, + maxChildSize: 1, + initialChildSize: 0.7, + snap: true, + expand: false, + snapSizes: const [0.7], + builder: (BuildContext context, ScrollController scrollController) { + return FavPanel( + ctr: ctr, + scrollController: scrollController, + ); + }, + ); + }, + ); + } + static String buildShadersAbsolutePath( String baseDirectory, List shaders) { List absolutePaths = shaders.map((shader) { @@ -402,10 +431,6 @@ class Utils { context: context, useSafeArea: true, isScrollControlled: true, - // transitionAnimationController: AnimationController( - // duration: const Duration(milliseconds: 200), - // vsync: this, - // ), sheetAnimationStyle: AnimationStyle(curve: Curves.ease), builder: (BuildContext context) { return DraggableScrollableSheet(