import 'dart:io' show Platform; import 'package:PiliPlus/common/widgets/custom_icon.dart'; import 'package:PiliPlus/pages/setting/models/model.dart'; import 'package:PiliPlus/pages/setting/widgets/slider_dialog.dart'; import 'package:PiliPlus/plugin/pl_player/models/play_repeat.dart'; import 'package:PiliPlus/utils/platform_utils.dart'; import 'package:PiliPlus/utils/storage.dart'; import 'package:PiliPlus/utils/storage_key.dart'; import 'package:PiliPlus/utils/storage_pref.dart'; import 'package:flutter/material.dart'; import 'package:get/get.dart'; import 'package:material_design_icons_flutter/material_design_icons_flutter.dart'; List get playSettings => [ const SwitchModel( title: '弹幕开关', subtitle: '是否展示弹幕', leading: Icon(CustomIcons.dm_settings), setKey: SettingBoxKey.enableShowDanmaku, defaultVal: true, ), NormalModel( onTap: (context, setState) => Get.toNamed('/playSpeedSet'), leading: const Icon(Icons.speed_outlined), title: '倍速设置', subtitle: '设置视频播放速度', ), if (Platform.isAndroid) NormalModel( onTap: _showAngleDegreesDialog, leading: const Icon(MdiIcons.angleAcute), title: '倾斜角度阈值', getSubtitle: () => '当前:「${Pref.angleDegrees}°」', ), SwitchModel( title: '全屏显示电池电量', leading: const Icon(Icons.battery_3_bar), setKey: SettingBoxKey.showBatteryLevel, defaultVal: PlatformUtils.isMobile, ), getVideoFilterSelectModel( title: '双击快进/快退时长', suffix: 's', key: SettingBoxKey.fastForBackwardDuration, values: [5, 10, 15], defaultValue: 10, isFilter: false, ), getVideoFilterSelectModel( title: '滑动快进/快退时长', subtitle: '从播放器一端滑到另一端的快进/快退时长', suffix: 's', key: SettingBoxKey.sliderDuration, values: [25, 50, 90, 100], defaultValue: 90, isFilter: false, ), SwitchModel( title: '启用键盘控制', leading: const Icon(Icons.keyboard_alt_outlined), setKey: SettingBoxKey.keyboardControl, defaultVal: PlatformUtils.isDesktop, ), if (PlatformUtils.isMobile) const SwitchModel( title: '后台播放', subtitle: '进入后台时继续播放', leading: Icon(Icons.motion_photos_pause_outlined), setKey: SettingBoxKey.continuePlayInBackground, defaultVal: false, ), const SwitchModel( title: '观看人数', subtitle: '展示同时在看人数', leading: Icon(Icons.people_outlined), setKey: SettingBoxKey.enableOnlineTotal, defaultVal: false, ), PopupModel( title: '播放顺序', leading: const Icon(Icons.repeat), value: () => Pref.playRepeat, items: PlayRepeat.values, onSelected: (value, setState) => GStorage.video .put(VideoBoxKey.playRepeat, value.index) .whenComplete(setState), ), ]; Future _showAngleDegreesDialog( BuildContext context, VoidCallback setState, ) async { final res = await showDialog( context: context, builder: (context) => SliderDialog( title: '倾斜角度阈值', min: 10.0, max: 90.0, divisions: 80, precise: 0, value: Pref.angleDegrees.toDouble(), suffix: '°', ), ); if (res != null) { await GStorage.setting.put(SettingBoxKey.angleDegrees, res.toInt()); setState(); } }