showQualityPanel static method

Future<void> showQualityPanel({
  1. required BuildContext context,
  2. required AliPlayerWidgetController controller,
})

显示清晰度面板(横屏底部按钮触发)

使用右侧滑入面板展示清晰度选项

Implementation

static Future<void> showQualityPanel({
  required BuildContext context,
  required AliPlayerWidgetController controller,
}) {
  final trackInfoList = controller.trackInfoListNotifier.value;
  final List<String> qualities =
      trackInfoList != null && trackInfoList.isNotEmpty
          ? TrackInfoUtil.getQualitiesFromTrackInfos(trackInfoList)
          : [];

  // 如果是单码率流,显示 AUTO
  final List<String> items = qualities.length == 1 ? ['AUTO'] : qualities;

  // 获取当前清晰度
  final currentTrackInfo = controller.currentTrackInfoNotifier.value;
  final currentQuality = currentTrackInfo != null
      ? TrackInfoUtil.getQuality(currentTrackInfo)
      : (items.isNotEmpty ? items.first : 'AUTO');

  final initialIndex = items.indexOf(currentQuality).clamp(0, items.length - 1);

  return showRightSettingPanel<String>(
    context: context,
    panel: RightWheelSettingPanel(
      items,
      initialIndex: initialIndex,
      onSelected: (value) {
        Navigator.of(context).pop(value);
      },
    ),
  ).then((value) {
    if (value != null && value != 'AUTO' && trackInfoList != null) {
      final selectedTrack = trackInfoList.firstWhere(
        (track) => TrackInfoUtil.getQuality(track) == value,
        orElse: () => trackInfoList.first,
      );
      controller.selectTrack(selectedTrack);
    }
  });
}