Merge branch 'main' into fix

This commit is contained in:
guozhigq
2024-10-30 23:18:36 +08:00
4 changed files with 48 additions and 33 deletions

View File

@ -5,7 +5,7 @@ import 'package:pilipala/common/constants.dart';
import 'package:pilipala/common/widgets/network_img_layer.dart'; import 'package:pilipala/common/widgets/network_img_layer.dart';
import 'package:pilipala/models/video_detail_res.dart'; import 'package:pilipala/models/video_detail_res.dart';
import 'package:pilipala/utils/utils.dart'; import 'package:pilipala/utils/utils.dart';
import 'package:scrollable_positioned_list/scrollable_positioned_list.dart'; import 'package:scrollview_observer/scrollview_observer.dart';
import '../models/common/video_episode_type.dart'; import '../models/common/video_episode_type.dart';
import 'widgets/badge.dart'; import 'widgets/badge.dart';
import 'widgets/stat/danmu.dart'; import 'widgets/stat/danmu.dart';
@ -83,7 +83,8 @@ class PagesBottomSheet extends StatefulWidget {
} }
class _PagesBottomSheetState extends State<PagesBottomSheet> { class _PagesBottomSheetState extends State<PagesBottomSheet> {
final ItemScrollController _itemScrollController = ItemScrollController(); final ScrollController _listScrollController = ScrollController();
late ListObserverController _listObserverController;
final ScrollController _scrollController = ScrollController(); final ScrollController _scrollController = ScrollController();
late int currentIndex; late int currentIndex;
@ -92,10 +93,17 @@ class _PagesBottomSheetState extends State<PagesBottomSheet> {
super.initState(); super.initState();
currentIndex = currentIndex =
widget.episodes.indexWhere((dynamic e) => e.cid == widget.currentCid); widget.episodes.indexWhere((dynamic e) => e.cid == widget.currentCid);
WidgetsBinding.instance.addPostFrameCallback((_) { _listObserverController =
ListObserverController(controller: _listScrollController);
if (widget.dataType == VideoEpidoesType.videoEpisode) { if (widget.dataType == VideoEpidoesType.videoEpisode) {
_itemScrollController.jumpTo(index: currentIndex); _listObserverController.initialIndexModel = ObserverIndexPositionModel(
} else { index: currentIndex,
isFixedHeight: true,
);
}
WidgetsBinding.instance.addPostFrameCallback((_) {
if (widget.dataType != VideoEpidoesType.videoEpisode) {
double itemHeight = (widget.isFullScreen double itemHeight = (widget.isFullScreen
? 400 ? 400
: Get.size.width - 3 * StyleString.safeSpace) / : Get.size.width - 3 * StyleString.safeSpace) /
@ -118,6 +126,12 @@ class _PagesBottomSheetState extends State<PagesBottomSheet> {
return '选集'; return '选集';
} }
@override
void dispose() {
_listObserverController.controller?.dispose();
super.dispose();
}
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return StatefulBuilder( return StatefulBuilder(
@ -136,8 +150,10 @@ class _PagesBottomSheetState extends State<PagesBottomSheet> {
Expanded( Expanded(
child: Material( child: Material(
child: widget.dataType == VideoEpidoesType.videoEpisode child: widget.dataType == VideoEpidoesType.videoEpisode
? ScrollablePositionedList.builder( ? ListViewObserver(
itemScrollController: _itemScrollController, controller: _listObserverController,
child: ListView.builder(
controller: _listScrollController,
itemCount: widget.episodes.length + 1, itemCount: widget.episodes.length + 1,
itemBuilder: (BuildContext context, int index) { itemBuilder: (BuildContext context, int index) {
bool isLastItem = index == widget.episodes.length; bool isLastItem = index == widget.episodes.length;
@ -157,6 +173,7 @@ class _PagesBottomSheetState extends State<PagesBottomSheet> {
isFullScreen: widget.isFullScreen, isFullScreen: widget.isFullScreen,
); );
}, },
),
) )
: Padding( : Padding(
padding: const EdgeInsets.symmetric( padding: const EdgeInsets.symmetric(

View File

@ -7,7 +7,6 @@ import 'package:hive/hive.dart';
import 'package:pilipala/models/bangumi/info.dart'; import 'package:pilipala/models/bangumi/info.dart';
import 'package:pilipala/pages/video/detail/index.dart'; import 'package:pilipala/pages/video/detail/index.dart';
import 'package:pilipala/utils/storage.dart'; import 'package:pilipala/utils/storage.dart';
import 'package:scrollable_positioned_list/scrollable_positioned_list.dart';
import '../../../common/pages_bottom_sheet.dart'; import '../../../common/pages_bottom_sheet.dart';
import '../../../models/common/video_episode_type.dart'; import '../../../models/common/video_episode_type.dart';
import '../introduction/controller.dart'; import '../introduction/controller.dart';
@ -44,7 +43,6 @@ class _BangumiPanelState extends State<BangumiPanel> {
late int cid; late int cid;
String heroTag = Get.arguments['heroTag']; String heroTag = Get.arguments['heroTag'];
late final VideoDetailController videoDetailCtr; late final VideoDetailController videoDetailCtr;
final ItemScrollController itemScrollController = ItemScrollController();
late PersistentBottomSheetController? _bottomSheetController; late PersistentBottomSheetController? _bottomSheetController;
@override @override

View File

@ -1434,14 +1434,14 @@ packages:
url: "https://pub.flutter-io.cn" url: "https://pub.flutter-io.cn"
source: hosted source: hosted
version: "0.1.3" version: "0.1.3"
scrollable_positioned_list: scrollview_observer:
dependency: "direct main" dependency: "direct main"
description: description:
name: scrollable_positioned_list name: scrollview_observer
sha256: "1b54d5f1329a1e263269abc9e2543d90806131aa14fe7c6062a8054d57249287" sha256: fa408bcfd41e19da841eb53fc471f8f952d5ef818b854d2505c4bb3f0c876381
url: "https://pub.flutter-io.cn" url: "https://pub.flutter-io.cn"
source: hosted source: hosted
version: "0.3.8" version: "1.22.0"
sentry: sentry:
dependency: transitive dependency: transitive
description: description:

View File

@ -134,7 +134,7 @@ dependencies:
# 极验 # 极验
gt3_flutter_plugin: ^0.1.0 gt3_flutter_plugin: ^0.1.0
uuid: ^3.0.7 uuid: ^3.0.7
scrollable_positioned_list: ^0.3.8 scrollview_observer: ^1.22.0
catcher_2: ^1.2.6 catcher_2: ^1.2.6
logger: ^2.3.0 logger: ^2.3.0
path: ^1.9.0 path: ^1.9.0