mirror of
https://github.com/nini22P/iris.git
synced 2026-05-31 08:31:29 +08:00
move brightness and volume code to hooks. update change log
This commit is contained in:
21
CHANGELOG.md
21
CHANGELOG.md
@@ -1,3 +1,24 @@
|
||||
## v1.2.0
|
||||
|
||||
### Changelog
|
||||
* Support jumping to video playback from external clicks (Windows version can play by command line or dragging files to the window)
|
||||
* Support adjusting brightness and volume gestures (Brightness gestures are not available on Windows version)
|
||||
* Support playing online links
|
||||
* Add an option to always start playback from the beginning
|
||||
* On Android 11 and above, file reading is changed to using the "Manage All Files" permission
|
||||
* Improved WebDAV connection test function
|
||||
* Improved some visual effects
|
||||
|
||||
### 更新日志
|
||||
* 支持从外部点击视频跳转播放(Windows 版本可以通过命令行或者拖拽文件到窗口播放)
|
||||
* 支持调整亮度和音量手势(Windows 版本调整亮度手势不可用)
|
||||
* 支持播放在线链接
|
||||
* 添加总是从头开始播放的选项
|
||||
* Android 11 以上读取文件时改为使用 `管理所有文件` 权限
|
||||
* 改进 WebDAV 测试连接功能
|
||||
* 改进了部分视觉效果
|
||||
|
||||
|
||||
## v1.1.1
|
||||
|
||||
### Changelog
|
||||
|
||||
45
lib/hooks/use_brightness.dart
Normal file
45
lib/hooks/use_brightness.dart
Normal file
@@ -0,0 +1,45 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_hooks/flutter_hooks.dart';
|
||||
import 'package:iris/utils/logger.dart';
|
||||
import 'package:screen_brightness/screen_brightness.dart';
|
||||
|
||||
ValueNotifier<double?> useBrightness(bool isGesture) {
|
||||
final brightness = useState<double?>(null);
|
||||
|
||||
useEffect(() {
|
||||
try {
|
||||
() async {
|
||||
if (!isGesture) return;
|
||||
brightness.value = await ScreenBrightness().current;
|
||||
}();
|
||||
} catch (e) {
|
||||
logger('Error getting brightness: $e');
|
||||
}
|
||||
return () => brightness.value = null;
|
||||
}, [isGesture]);
|
||||
|
||||
useEffect(() {
|
||||
try {
|
||||
if (brightness.value != null && isGesture) {
|
||||
ScreenBrightness().setScreenBrightness(brightness.value!);
|
||||
}
|
||||
} catch (e) {
|
||||
logger('Error setting brightness: $e');
|
||||
}
|
||||
return;
|
||||
}, [brightness.value]);
|
||||
|
||||
// 退出时重置亮度
|
||||
useEffect(
|
||||
() => () {
|
||||
try {
|
||||
ScreenBrightness().resetScreenBrightness();
|
||||
} catch (e) {
|
||||
logger('Error resetting brightness: $e');
|
||||
}
|
||||
},
|
||||
[],
|
||||
);
|
||||
|
||||
return brightness;
|
||||
}
|
||||
34
lib/hooks/use_volume.dart
Normal file
34
lib/hooks/use_volume.dart
Normal file
@@ -0,0 +1,34 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_hooks/flutter_hooks.dart';
|
||||
import 'package:flutter_volume_controller/flutter_volume_controller.dart';
|
||||
import 'package:iris/utils/logger.dart';
|
||||
|
||||
ValueNotifier<double?> useVolume(bool isGesture) {
|
||||
final volume = useState<double?>(null);
|
||||
|
||||
useEffect(() {
|
||||
try {
|
||||
() async {
|
||||
if (!isGesture) return;
|
||||
await FlutterVolumeController.updateShowSystemUI(false);
|
||||
volume.value = await FlutterVolumeController.getVolume();
|
||||
}();
|
||||
} catch (e) {
|
||||
logger('Error getting volume: $e');
|
||||
}
|
||||
return () => volume.value = null;
|
||||
}, [isGesture]);
|
||||
|
||||
useEffect(() {
|
||||
try {
|
||||
if (volume.value != null && isGesture) {
|
||||
FlutterVolumeController.setVolume(volume.value!);
|
||||
}
|
||||
} catch (e) {
|
||||
logger('Error setting volume: $e');
|
||||
}
|
||||
return;
|
||||
}, [volume.value]);
|
||||
|
||||
return volume;
|
||||
}
|
||||
@@ -5,10 +5,11 @@ import 'package:desktop_drop/desktop_drop.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter/services.dart';
|
||||
import 'package:flutter_hooks/flutter_hooks.dart';
|
||||
import 'package:flutter_volume_controller/flutter_volume_controller.dart';
|
||||
import 'package:flutter_zustand/flutter_zustand.dart';
|
||||
import 'package:iris/hooks/use_brightness.dart';
|
||||
import 'package:iris/hooks/use_player_controller.dart';
|
||||
import 'package:iris/hooks/use_player_core.dart';
|
||||
import 'package:iris/hooks/use_volume.dart';
|
||||
import 'package:iris/info.dart';
|
||||
import 'package:iris/models/file.dart';
|
||||
import 'package:iris/models/storages/local.dart';
|
||||
@@ -36,7 +37,6 @@ import 'package:iris/pages/player/control_bar.dart';
|
||||
import 'package:media_kit/media_kit.dart';
|
||||
import 'package:media_kit_video/media_kit_video.dart';
|
||||
import 'package:path_provider/path_provider.dart';
|
||||
import 'package:screen_brightness/screen_brightness.dart';
|
||||
import 'package:window_manager/window_manager.dart';
|
||||
|
||||
class IrisPlayer extends HookWidget {
|
||||
@@ -140,67 +140,8 @@ class IrisPlayer extends HookWidget {
|
||||
final isShowControl = useState(true);
|
||||
final isShowProgress = useState(false);
|
||||
|
||||
final brightness = useState<double?>(null);
|
||||
final volume = useState<double?>(null);
|
||||
|
||||
useEffect(() {
|
||||
try {
|
||||
() async {
|
||||
if (!isLeftGesture.value) return;
|
||||
brightness.value = await ScreenBrightness().current;
|
||||
}();
|
||||
} catch (e) {
|
||||
logger('Error getting brightness: $e');
|
||||
}
|
||||
return () => brightness.value = null;
|
||||
}, [isLeftGesture.value]);
|
||||
|
||||
useEffect(() {
|
||||
try {
|
||||
() async {
|
||||
if (!isRightGesture.value) return;
|
||||
await FlutterVolumeController.updateShowSystemUI(false);
|
||||
volume.value = await FlutterVolumeController.getVolume();
|
||||
}();
|
||||
} catch (e) {
|
||||
logger('Error getting volume: $e');
|
||||
}
|
||||
return () => volume.value = null;
|
||||
}, [isRightGesture.value]);
|
||||
|
||||
useEffect(() {
|
||||
try {
|
||||
if (brightness.value != null && isLeftGesture.value) {
|
||||
ScreenBrightness().setScreenBrightness(brightness.value!);
|
||||
}
|
||||
} catch (e) {
|
||||
logger('Error setting brightness: $e');
|
||||
}
|
||||
return;
|
||||
}, [brightness.value]);
|
||||
|
||||
// 退出时重置亮度
|
||||
useEffect(
|
||||
() => () {
|
||||
try {
|
||||
ScreenBrightness().resetScreenBrightness();
|
||||
} catch (e) {
|
||||
logger('Error resetting brightness: $e');
|
||||
}
|
||||
},
|
||||
[],
|
||||
);
|
||||
|
||||
useEffect(() {
|
||||
try {
|
||||
if (volume.value != null && isRightGesture.value) {
|
||||
FlutterVolumeController.setVolume(volume.value!);
|
||||
}
|
||||
} catch (e) {
|
||||
logger('Error setting volume: $e');
|
||||
}
|
||||
return;
|
||||
}, [volume.value]);
|
||||
final brightness = useBrightness(isLeftGesture.value);
|
||||
final volume = useVolume(isRightGesture.value);
|
||||
|
||||
AppLifecycleState? appLifecycleState = useAppLifecycleState();
|
||||
|
||||
@@ -821,17 +762,20 @@ class IrisPlayer extends HookWidget {
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
children: [
|
||||
Icon(
|
||||
Icons.speed_rounded,
|
||||
color: Colors.white,
|
||||
size: 24,
|
||||
Transform.translate(
|
||||
offset: const Offset(0, 1.5),
|
||||
child: Icon(
|
||||
Icons.speed_rounded,
|
||||
color: Colors.white,
|
||||
size: 24,
|
||||
),
|
||||
),
|
||||
const SizedBox(width: 12),
|
||||
const SizedBox(width: 10),
|
||||
Text(
|
||||
playerCore.rate.toString(),
|
||||
style: const TextStyle(
|
||||
color: Colors.white,
|
||||
fontSize: 24,
|
||||
fontSize: 20,
|
||||
height: 1,
|
||||
),
|
||||
),
|
||||
@@ -858,7 +802,11 @@ class IrisPlayer extends HookWidget {
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
children: [
|
||||
Icon(
|
||||
Icons.brightness_6_rounded,
|
||||
brightness.value == 0
|
||||
? Icons.brightness_low_rounded
|
||||
: brightness.value! < 1
|
||||
? Icons.brightness_medium_rounded
|
||||
: Icons.brightness_high_rounded,
|
||||
color: Colors.white,
|
||||
size: 24,
|
||||
),
|
||||
@@ -867,6 +815,7 @@ class IrisPlayer extends HookWidget {
|
||||
width: 100,
|
||||
child: LinearProgressIndicator(
|
||||
value: brightness.value,
|
||||
borderRadius: BorderRadius.circular(4),
|
||||
backgroundColor: Colors.grey,
|
||||
valueColor:
|
||||
AlwaysStoppedAnimation<Color>(Colors.white),
|
||||
@@ -895,7 +844,11 @@ class IrisPlayer extends HookWidget {
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
children: [
|
||||
Icon(
|
||||
Icons.volume_up_rounded,
|
||||
volume.value == 0
|
||||
? Icons.volume_mute_rounded
|
||||
: volume.value! < 0.5
|
||||
? Icons.volume_down_rounded
|
||||
: Icons.volume_up_rounded,
|
||||
color: Colors.white,
|
||||
size: 24,
|
||||
),
|
||||
@@ -904,6 +857,7 @@ class IrisPlayer extends HookWidget {
|
||||
width: 100,
|
||||
child: LinearProgressIndicator(
|
||||
value: volume.value,
|
||||
borderRadius: BorderRadius.circular(4),
|
||||
backgroundColor: Colors.grey,
|
||||
valueColor: AlwaysStoppedAnimation<Color>(
|
||||
Colors.white,
|
||||
|
||||
@@ -16,7 +16,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev
|
||||
# https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html
|
||||
# In Windows, build-name is used as the major, minor, and patch parts
|
||||
# of the product and file versions while build-number is used as the build suffix.
|
||||
version: 1.1.1+2
|
||||
version: 1.2.0+3
|
||||
|
||||
environment:
|
||||
sdk: ^3.5.4
|
||||
|
||||
Reference in New Issue
Block a user