文章目录
- [一、Flutter 屏幕常亮需求](#一、Flutter 屏幕常亮需求)
- [二、使用 wakelock_plus 插件开发 Flutter 屏幕常亮功能](#二、使用 wakelock_plus 插件开发 Flutter 屏幕常亮功能)
-
- [1、wakelock_plus 插件介绍](#1、wakelock_plus 插件介绍)
- [2、引入 wakelock_plus 依赖](#2、引入 wakelock_plus 依赖)
- [3、wakelock_plus 插件对应的不同平台配置](#3、wakelock_plus 插件对应的不同平台配置)
- [4、wakelock_plus 插件基础用法代码](#4、wakelock_plus 插件基础用法代码)
- [5、wakelock_plus 插件监听单个页面的生命周期](#5、wakelock_plus 插件监听单个页面的生命周期)
- [6、wakelock_plus 插件监听 APP 应用前后台变化](#6、wakelock_plus 插件监听 APP 应用前后台变化)
- [7、wakelock_plus 插件开发注意事项](#7、wakelock_plus 插件开发注意事项)
- 章节总结
- [三、Android 开发配置](#三、Android 开发配置)
-
- 1、添加权限
- [2、Activity 代码](#2、Activity 代码)
参考文档 :
- Flutter 官方文档 : https://docs.flutter.dev/install/quick
- 使用出现网络问题 , 参考 在中国网络环境下使用 Flutter 文档 ;
- 使用 VS Code 开发 Flutter 环境安装 : https://docs.flutter.cn/install/with-vs-code
- VS Code 安装 : https://code.visualstudio.com/docs/setup/setup-overview

一、Flutter 屏幕常亮需求
1、业务场景
日常 Flutter 开发中 , 很多业务场景需要 APP 页面 长期保持屏幕常亮 , 不自动变暗、不进入息屏、不触发系统屏保 :
- 视频播放、直播投屏页面
- 车载设备、工业平板控制终端
- 扫码开票、设备巡检长驻页面
- 实时数据监控、WebSocket设备状态大屏
- 阅读器、文档长浏览页面
Flutter 自带没有屏幕常亮API ;
Flutter 是纯 UI 框架 , 无法直接操作系统底层电源、锁屏权限 ;
屏幕息屏 / 锁屏是安卓、iOS原生系统电源管理机制 , Flutter 只能通过成熟第三方插件调用原生系统唤醒锁实现 ;
2、底层核心原理
手机/平板系统默认搭载电源省电策略 : 设备无触摸操作一段时间后 , 自动降低屏幕亮度→屏幕变暗→关闭屏幕 ( 息屏 ) →启动系统屏保→设备锁屏 , 降低设备功耗 ;
- 屏幕变暗 : 系统自动降低屏幕亮度 ( 常亮可禁止 )
- 屏幕息屏 : 屏幕黑屏关闭 ( 常亮可禁止 )
- 系统屏保 : 闲置后弹出屏保画面 ( 常亮可禁止 )
- 设备锁屏 : 触发密码/指纹锁屏 ( 常亮可禁止 )
- 后台保活 : 屏幕常亮 不能 保证APP退后台不被杀进程 , 仅控制屏幕硬件状态 ;
安卓、iOS、Windows、鸿蒙全平台底层都提供 WakeLock ( 电源唤醒锁 ) 系统能力 :
- 应用申请持有唤醒锁后 , 会向系统电源管理器发送常驻保活指令 ;
- 系统强制终止当前APP页面的自动休眠、变暗、屏保、锁屏逻辑 , 直到代码主动释放唤醒锁 ;
使用 Flutter 屏幕常亮插件 wakelock_plus , 本质工作 :
- Flutter层调用插件方法
- 插件桥接调用 Android/iOS 原生系统API
- 原生申请/释放 WakeLock 唤醒锁
- 控制系统屏幕休眠策略
二、使用 wakelock_plus 插件开发 Flutter 屏幕常亮功能
1、wakelock_plus 插件介绍
wakelock_plus 插件 是 Flutter 社区官方维护的跨平台屏幕唤醒锁插件 , 支持 Android / iOS / MacOS / Windows / Linux / Web ; 适配 Flutter3.0+ 全部新版本 ;
2、引入 wakelock_plus 依赖
pubspec.yaml 引入依赖 :
shell
dependencies:
wakelock_plus: ^1.6.1 # 截止2026最新稳定版本
终端执行拉取依赖 :
shell
flutter pub get
3、wakelock_plus 插件对应的不同平台配置
wakelock_plus 插件对应的不同平台配置 :
- Android : 无需手动配置权限 , 插件内部自动注册
- iOS : 零配置 , 直接使用
- 桌面/Web : 零配置 , 系统原生API直接调用
4、wakelock_plus 插件基础用法代码
wakelock_plus 插件基础用法代码 : 单行代码开关屏幕常亮 ;
dart
import 'package:wakelock_plus/wakelock_plus.dart';
// 1. 开启屏幕常亮 ------ 禁止息屏、屏保、自动锁屏
await WakelockPlus.enable();
// 2. 关闭屏幕常亮 ------ 恢复系统默认省电策略
await WakelockPlus.disable();
// 3. 查询当前是否处于常亮状态
bool isKeepAlive = await WakelockPlus.isEnabled;
以上三行代码 , 即可实现全局屏幕不息屏!
5、wakelock_plus 插件监听单个页面的生命周期
直接调用 WakelockPlus.enable() 代码 , 退出应用时如果没有 WakelockPlus.disable() 关闭 , 则出现 :
- 退出当前页面 , 全局手机一直常亮 , 手机无法锁屏 , 异常耗电
- APP退到后台仍然保持唤醒 , 系统弹窗警告耗电异常
- 页面重复开启关闭 , 状态错乱
正确开发规范 : 跟随页面/APP生命周期自动控制常亮状态
代码示例如下 :
dart
import 'package:flutter/material.dart';
import 'package:wakelock_plus/wakelock_plus.dart';
class MonitorPage extends StatefulWidget {
const MonitorPage({super.key});
@override
State<MonitorPage> createState() => _MonitorPageState();
}
class _MonitorPageState extends State<MonitorPage> {
@override
void initState() {
super.initState();
// 页面初始化 : 开启屏幕常亮 , 禁止息屏屏保
WakelockPlus.enable();
}
@override
void dispose() {
// 核心 : 页面销毁 , 立刻关闭常亮 , 归还系统电源权限
WakelockPlus.disable();
super.dispose();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: const Text('设备监控(屏幕常亮)')),
body: const Center(child: Text('当前页面永不自动息屏')),
);
}
}
6、wakelock_plus 插件监听 APP 应用前后台变化
APP前台页面常亮 , 退后台自动关闭常亮省电 , 结合 WidgetsBindingObserver 监听应用生命周期 :
dart
class _MonitorPageState extends State<MonitorPage> with WidgetsBindingObserver{
@override
void initState() {
super.initState();
WidgetsBinding.instance.addObserver(this);
WakelockPlus.enable();
}
// 监听APP生命周期变化
@override
void didChangeAppLifecycleState(AppLifecycleState state) {
super.didChangeAppLifecycleState(state);
switch(state){
// APP前台运行 : 开启常亮
case AppLifecycleState.resumed:
WakelockPlus.enable();
break;
// APP退后台、弹窗覆盖 : 关闭常亮省电
case AppLifecycleState.paused:
case AppLifecycleState.inactive:
WakelockPlus.disable();
break;
default: break;
}
}
@override
void dispose() {
WidgetsBinding.instance.removeObserver(this);
WakelockPlus.disable();
super.dispose();
}
}
7、wakelock_plus 插件开发注意事项
wakelock_plus 插件开发注意事项 :
- 忘记 disable 关闭唤醒锁 :
- 只调用 enable() 不关闭 : APP退出、页面关闭后 , 手机永久无法自动息屏 ; 用户手机耗电飙升 , 应用商店审核不通过 ;
- 解决方案 : initState 开启、dispose/onClose 强制关闭
- 使用废弃 wakelock 原始插件 : 原始 wakelock 停止维护 , Flutter3.3+编译报错、iOS平台失效 ; 全部替换为 wakelock_plus ;
- 屏幕常亮≠后台保活 : 很多开发者混淆概念 , 屏幕常亮仅仅控制屏幕硬件不黑屏 , 无法防止APP退后台被系统杀死进程 ; 后台保活需要单独配置原生后台权限 ;
- 系统省电模式失效问题 : 手机开启【超级省电/极限省电模式】时 , 系统强制剥夺APP唤醒锁权限 , 常亮功能失效 ; 属于系统级限制 , APP代码无法绕过!
章节总结
1、Flutter 无 原生息屏控制API , 底层依靠 系统 WakeLock 唤醒锁 实现屏幕常亮 ;
2、生产环境优先 wakelock_plus 插件 , 全平台零配置、开发效率最高 ;
3、核心开发准则 : 页面进入开启、页面销毁关闭、后台自动关闭 , 杜绝耗电异常 ;
4、区分 屏幕常亮 和 进程后台保活 , 避免业务需求理解偏差 ;
5、系统 省电模式 会强制失效该功能 , 属于正常系统限制 ;
三、Android 开发配置
本章节内容 , 仅做参考 , 如果报错时 , 考虑手动添加如下内容 ;
1、添加权限
Android平台必须添加对应系统权限 , 否则无法弹出授权弹窗 , 在 android/app/src/main/AndroidManifest.xml 中配置如下 权限 ;
xml
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">
<!-- 屏幕常亮权限 -->
<uses-permission android:name="android.permission.WAKE_LOCK" />
</manifest>
2、Activity 代码
kt
import io.flutter.embedding.android.FlutterActivity
import io.flutter.embedding.engine.FlutterEngine
import android.view.WindowManager
class MainActivity : FlutterActivity(){
override fun configureFlutterEngine(flutterEngine: FlutterEngine) {
super.configureFlutterEngine(flutterEngine)
window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON)
}
}