diff --git a/lib/models/common/video/audio_quality.dart b/lib/models/common/video/audio_quality.dart index 6adae89bd..61e351f15 100644 --- a/lib/models/common/video/audio_quality.dart +++ b/lib/models/common/video/audio_quality.dart @@ -1,4 +1,7 @@ enum AudioQuality { + u_100010(100010, '100010'), + u_100009(100009, '100009'), + u_100008(100008, '100008'), hiRes(30251, 'Hi-Res无损'), dolby(30250, '杜比全景声'), k192(30280, '192K'), diff --git a/lib/pages/live_room/controller.dart b/lib/pages/live_room/controller.dart index 60dc2c860..38bec011b 100644 --- a/lib/pages/live_room/controller.dart +++ b/lib/pages/live_room/controller.dart @@ -21,6 +21,7 @@ import 'package:PiliPlus/utils/storage_pref.dart'; import 'package:PiliPlus/utils/video_utils.dart'; import 'package:canvas_danmaku/canvas_danmaku.dart'; import 'package:connectivity_plus/connectivity_plus.dart'; +import 'package:easy_debounce/easy_throttle.dart'; import 'package:flutter/material.dart'; import 'package:flutter/rendering.dart'; import 'package:flutter_smart_dialog/flutter_smart_dialog.dart'; @@ -323,9 +324,13 @@ class LiveRoomController extends GetxController { selfSend: isLogin && uid == mid, ), ); - if (!isFullScreen && !disableAutoScroll.value) { - WidgetsBinding.instance.addPostFrameCallback( - scrollToBottom, + if (!disableAutoScroll.value) { + EasyThrottle.throttle( + 'liveDm', + const Duration(milliseconds: 500), + () => WidgetsBinding.instance.addPostFrameCallback( + scrollToBottom, + ), ); } } diff --git a/lib/pages/member_opus/view.dart b/lib/pages/member_opus/view.dart index e6cb1d18d..d568da2df 100644 --- a/lib/pages/member_opus/view.dart +++ b/lib/pages/member_opus/view.dart @@ -39,6 +39,8 @@ class _MemberOpusState extends State tag: widget.heroTag, ); + late double _maxWidth; + @override Widget build(BuildContext context) { super.build(context); @@ -121,6 +123,7 @@ class _MemberOpusState extends State maxCrossAxisExtent: Grid.smallCardWidth, mainAxisSpacing: StyleString.safeSpace, crossAxisSpacing: StyleString.safeSpace, + callback: (value) => _maxWidth = value, ); Widget _buildBody(LoadingState?> loadingState) { @@ -143,6 +146,7 @@ class _MemberOpusState extends State } return SpaceOpusItem( item: response[index], + maxWidth: _maxWidth, ); }, childCount: response!.length, diff --git a/lib/pages/member_opus/widgets/space_opus_item.dart b/lib/pages/member_opus/widgets/space_opus_item.dart index dbf9df32a..4120e0cc3 100644 --- a/lib/pages/member_opus/widgets/space_opus_item.dart +++ b/lib/pages/member_opus/widgets/space_opus_item.dart @@ -1,18 +1,21 @@ +import 'package:PiliPlus/common/widgets/dyn/ink_well.dart'; import 'package:PiliPlus/common/widgets/image/network_img_layer.dart'; import 'package:PiliPlus/common/widgets/stat/stat.dart'; import 'package:PiliPlus/models/common/image_type.dart'; import 'package:PiliPlus/models/common/stat_type.dart'; import 'package:PiliPlus/models_new/space/space_opus/item.dart'; import 'package:PiliPlus/utils/page_utils.dart'; -import 'package:flutter/material.dart'; +import 'package:flutter/material.dart' hide InkWell; class SpaceOpusItem extends StatelessWidget { const SpaceOpusItem({ super.key, required this.item, + required this.maxWidth, }); final SpaceOpusItemModel item; + final double maxWidth; @override Widget build(BuildContext context) { @@ -31,16 +34,12 @@ class SpaceOpusItem extends StatelessWidget { if (hasPic) Stack( children: [ - LayoutBuilder( - builder: (context, constraints) { - return NetworkImgLayer( - width: constraints.maxWidth, - height: constraints.maxWidth * item.cover!.ratio, - src: item.cover!.url, - type: ImageType.emote, - quality: 60, - ); - }, + NetworkImgLayer( + width: maxWidth, + height: maxWidth * item.cover!.ratio, + src: item.cover!.url, + type: ImageType.emote, + quality: 60, ), Positioned( left: 0, diff --git a/lib/pages/video/controller.dart b/lib/pages/video/controller.dart index 52424d7ae..026150621 100644 --- a/lib/pages/video/controller.dart +++ b/lib/pages/video/controller.dart @@ -1226,7 +1226,8 @@ class VideoDetailController extends GetxController int currentHighVideoQa = allVideosList.first.quality.code; // 预设的画质为null,则当前可用的最高质量 int resVideoQa = currentHighVideoQa; - if (plPlayerController.cacheVideoQa! <= currentHighVideoQa) { + if (data.acceptQuality?.isNotEmpty == true && + plPlayerController.cacheVideoQa! <= currentHighVideoQa) { // 如果预设的画质低于当前最高 final List numbers = data.acceptQuality! .where((e) => e <= currentHighVideoQa)