Flutter实现安卓手机屏幕亮度调节方案求助
Flutter安卓屏幕亮度调节实现示例
如果你用screen插件遇到问题,推荐改用维护更活跃的screen_brightness插件,以下是完整的实现步骤和代码示例:
1. 添加依赖
在pubspec.yaml中添加依赖:
dependencies: flutter: sdk: flutter screen_brightness: ^0.2.2 # 替换为最新版本 permission_handler: ^10.2.0 # 用于申请系统权限
执行flutter pub get安装依赖。
2. 配置安卓权限
在android/app/src/main/AndroidManifest.xml中添加权限:
<uses-permission android:name="android.permission.WRITE_SETTINGS" />
3. 完整代码示例
这个示例包含权限申请、获取当前亮度、滑动调节亮度的功能:
import 'package:flutter/material.dart'; import 'package:screen_brightness/screen_brightness.dart'; import 'package:permission_handler/permission_handler.dart'; void main() => runApp(const MyApp()); class MyApp extends StatelessWidget { const MyApp({super.key}); @override Widget build(BuildContext context) { return MaterialApp( home: Scaffold( appBar: AppBar(title: const Text('屏幕亮度调节器')), body: const BrightnessControlPanel(), ), ); } } class BrightnessControlPanel extends StatefulWidget { const BrightnessControlPanel({super.key}); @override State<BrightnessControlPanel> createState() => _BrightnessControlPanelState(); } class _BrightnessControlPanelState extends State<BrightnessControlPanel> { double _currentBrightness = 0.5; bool _hasPermission = false; @override void initState() { super.initState(); _checkAndRequestPermission(); _fetchCurrentBrightness(); } Future<void> _checkAndRequestPermission() async { final permissionStatus = await Permission.systemWrite.status; if (!permissionStatus.isGranted) { final result = await Permission.systemWrite.request(); setState(() => _hasPermission = result.isGranted); } else { setState(() => _hasPermission = true); } } Future<void> _fetchCurrentBrightness() async { if (!_hasPermission) return; final brightness = await ScreenBrightness().current; setState(() => _currentBrightness = brightness); } Future<void> _adjustBrightness(double value) async { if (!_hasPermission) { ScaffoldMessenger.of(context).showSnackBar( const SnackBar(content: Text('请先授予系统设置权限')), ); return; } await ScreenBrightness().setScreenBrightness(value); setState(() => _currentBrightness = value); } @override Widget build(BuildContext context) { return Padding( padding: const EdgeInsets.all(16.0), child: Column( mainAxisAlignment: MainAxisAlignment.center, children: [ Text( '当前亮度: ${(_currentBrightness * 100).toInt()}%', style: const TextStyle(fontSize: 18), ), const SizedBox(height: 20), Slider( value: _currentBrightness, min: 0.0, max: 1.0, label: '${(_currentBrightness * 100).toInt()}%', onChanged: _adjustBrightness, ), const SizedBox(height: 20), ElevatedButton( onPressed: _checkAndRequestPermission, child: const Text('重新申请权限'), ), ], ), ); } }
关键注意事项
WRITE_SETTINGS是安卓特殊权限,首次申请时会跳转到系统设置页面让用户手动授权- 亮度值范围为
0.0(最暗)到1.0(最亮) - 请使用真实安卓设备测试,部分模拟器可能不支持亮度调节
若坚持使用screen插件的排查方案
如果还是想用screen插件,尝试以下步骤解决VS Code中的问题:
- 执行
flutter clean清理项目缓存,再运行flutter pub get - 检查安卓SDK版本是否符合插件要求(插件文档通常会标注最低SDK版本)
- 重启VS Code并重新加载项目
内容的提问来源于stack exchange,提问作者TechMatt__
相关产品推荐
相关产品推荐

