Flutter 库:保持常亮——唤醒锁 (wakelock)
文章目录
一、概述
1、简介
wakelock 是允许您保持设备屏幕唤醒的插件,即防止屏幕睡眠。
该插件允许您启用和切换屏幕唤醒锁,从而防止屏幕自动关闭。
从本质上讲,这使您可以保持设备处于唤醒状态,即防止设备进入睡眠状态。
2、支持的平台
ANDROID IOS MACOS WEB WINDOWS
二、基本使用
1、安装
flutter pub add wakelock
2、基本使用
这个插件中的所有功能都是通过 Wakelock
类来控制的。
如果你想要启用唤醒锁,也就是保持设备的唤醒状态,你只需要调用 Wakelock.enable()
,要禁用唤醒锁,可以使用 Wakelock.disable()
:
import 'package:wakelock/wakelock.dart';
// ...
// 以下代码将启用 Android 和 iOS 的唤醒锁。
Wakelock.enable();
// 下面的代码将禁用唤醒锁。
Wakelock.disable();
3、使用示例
在组件初始化和销毁前分别开启和关闭。
void initState() {
super.initState();
// 启用屏幕常亮
Wakelock.enable();
}
void dispose() {
// 禁用屏幕常亮
Wakelock.disable();
super.dispose();
}
三、定义布尔值,使用 Wakelock.toggle
切换
对于更高级的用法,你可以通过将布尔值传递给 Wakelock.toggle
来启用或禁用唤醒锁,并且可以使用 Wakelock.isEnabled
来获取当前的唤醒锁状态:
import 'package:wakelock/wakelock.dart';
// ...
// 以下代码根据布尔值切换唤醒锁状态。
bool enable = true;
// 启用唤醒锁。
Wakelock.toggle(enable: enable);
enable = false;
// 禁用唤醒锁。
Wakelock.toggle(enable: enable);
// 如果你想要获取当前的唤醒锁状态,
// 你需要在一个异步作用域中,
// 并使用 `enabled` 方法返回的 Future 进行等待。
bool wakelockEnabled = await Wakelock.enabled;
如果你希望等待唤醒锁切换完成(这需要很少的时间),你还可以使用 Wakelock.enable
、Wakelock.disable
和 Wakelock.toggle
中的任意一个进行等待。
四、确保 WidgetsBinding 已初始化
如果你想在 runApp()
之前(例如在 main()
函数中)调用 Wakelock.enable()
或其他函数,你必须确保首先初始化 WidgetsBinding
:
void main() {
WidgetsFlutterBinding.ensureInitialized();
Wakelock.enable();
runApp(..);
}
**一般来说,建议将唤醒锁与应用程序内的特定组件相关联,例如,只有在某个小部件可见时才启用它(持续启用)。**更频繁地调用 Wakelock.enable()
不会产生负面影响。
五、在 main() 函数中调用 Wakelock.enable() 的注意事项
正如前面提到的,在 main() 函数中调用 Wakelock.enable()
并不是最佳方法,有以下几个重要的原因:
-
用户期望屏幕在没有播放视频等情况下自动关闭。
-
很少有整个应用程序都需要屏幕一直保持打开的情况。
-
唤醒锁可能会被外部源随时释放,例如操作系统。
-
只调用一次
Wakelock.enable()
很可能意味着屏幕最终会在某个时刻关闭。
因此,你应该优先选择在应用程序内的需要屏幕保持打开的组件处于活动状态时启用唤醒锁。例如,可以在小部件的 build
方法中实现这一点。
import 'package:wakelock/wakelock.dart';
// ...
class MyWidget extends StatelessWidget {
Widget build(BuildContext context) {
// 在需要屏幕保持打开的组件处于活动状态时启用唤醒锁
Wakelock.enable();
// Widget 的其他构建逻辑
return Container(
// ...
);
}
}
通过将唤醒锁的启用与特定组件的可见性相关联,可以更好地控制唤醒锁的行为,并根据需要启用或禁用它。