You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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__

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 09:33:33