Flutter屏幕亮度控制插件screen_brightness_linux的使用

Flutter屏幕亮度控制插件screen_brightness_linux的使用

使用

这个包是被支持的,这意味着你可以直接使用screen_brightness。当你这样做时,这个包会自动包含在你的应用中。


示例代码

import 'dart:io';

import 'package:flutter/material.dart';
import 'package:screen_brightness_platform_interface/screen_brightness_platform_interface.dart';

void main() {
  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  static final RouteObserver<Route> routeObserver = RouteObserver<Route>();

  const MyApp({Key? key}) : super(key: key);

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: const HomePage(),
      onGenerateRoute: (settings) {
        late final Widget page;
        switch (settings.name) {
          case HomePage.routeName:
            page = const HomePage();
            break;

          case ControllerPage.routeName:
            page = const ControllerPage();
            break;

          case RouteAwarePage.routeName:
            page = const RouteAwarePage();
            break;

          case BlankPage.routeName:
            page = const BlankPage();
            break;

          case SettingPage.routeName:
            page = const SettingPage();
            break;

          default:
            throw UnimplementedError('page name not found');
        }

        return MaterialPageRoute(
          builder: (context) => page,
          settings: settings,
        );
      },
      navigatorObservers: [
        routeObserver,
      ],
    );
  }
}

class HomePage extends StatelessWidget {
  static const routeName = '/home';

  const HomePage({Key? key}) : super(key: key);

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('屏幕亮度示例'),
      ),
      body: Padding(
        padding: const EdgeInsets.all(8.0),
        child: Column(
          crossAxisAlignment: CrossAxisAlignment.stretch,
          children: [
            FutureBuilder<double>(
              future: ScreenBrightnessPlatform.instance.current,
              builder: (context, snapshot) {
                double currentBrightness = 0;
                if (snapshot.hasData) {
                  currentBrightness = snapshot.data!;
                }

                return StreamBuilder<double>(
                  stream: ScreenBrightnessPlatform
                      .instance.onCurrentBrightnessChanged,
                  builder: (context, snapshot) {
                    double changedBrightness = currentBrightness;
                    if (snapshot.hasData) {
                      changedBrightness = snapshot.data!;
                    }

                    return Text('当前亮度 $changedBrightness');
                  },
                );
              },
            ),
            ElevatedButton(
              onPressed: () =>
                  Navigator.of(context).pushNamed(ControllerPage.routeName),
              child: const Text('控制器示例页面'),
            ),
            ElevatedButton(
              onPressed: () =>
                  Navigator.of(context).pushNamed(RouteAwarePage.routeName),
              child: const Text('路由感知示例页面'),
            ),
            ElevatedButton(
              onPressed: () =>
                  Navigator.of(context).pushNamed(SettingPage.routeName),
              child: const Text('设置页面'),
            ),
          ],
        ),
      ),
    );
  }
}

class ControllerPage extends StatefulWidget {
  static const routeName = '/controller';

  const ControllerPage({Key? key}) : super(key: key);

  [@override](/user/override)
  State<ControllerPage> createState() => _ControllerPageState();
}

class _ControllerPageState extends State<ControllerPage> {
  Future<void> setBrightness(double brightness) async {
    try {
      await ScreenBrightnessPlatform.instance.setScreenBrightness(brightness);
    } catch (e) {
      debugPrint(e.toString());
      throw '设置亮度失败';
    }
  }

  Future<void> resetBrightness() async {
    try {
      await ScreenBrightnessPlatform.instance.resetScreenBrightness();
    } catch (e) {
      debugPrint(e.toString());
      throw '重置亮度失败';
    }
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('控制器'),
      ),
      body: Center(
        child: FutureBuilder<double>(
          future: ScreenBrightnessPlatform.instance.current,
          builder: (context, snapshot) {
            double currentBrightness = 0;
            if (snapshot.hasData) {
              currentBrightness = snapshot.data!;
            }

            return StreamBuilder<double>(
              stream:
                  ScreenBrightnessPlatform.instance.onCurrentBrightnessChanged,
              builder: (context, snapshot) {
                double changedBrightness = currentBrightness;
                if (snapshot.hasData) {
                  changedBrightness = snapshot.data!;
                }

                return Column(
                  mainAxisSize: MainAxisSize.min,
                  children: [
                    FutureBuilder<bool>(
                      future: ScreenBrightnessPlatform.instance.hasChanged,
                      builder: (context, snapshot) {
                        return Text(
                            '亮度通过插件已更改: ${snapshot.data}');
                      },
                    ),
                    Text('当前亮度: $changedBrightness'),
                    Slider.adaptive(
                      value: changedBrightness,
                      onChanged: (value) {
                        setBrightness(value);
                      },
                    ),
                    ElevatedButton(
                      onPressed: () {
                        resetBrightness();
                      },
                      child: const Text('重置亮度'),
                    ),
                  ],
                );
              },
            );
          },
        ),
      ),
    );
  }
}

class RouteAwarePage extends StatefulWidget {
  static const routeName = '/routeAware';

  const RouteAwarePage({Key? key}) : super(key: key);

  [@override](/user/override)
  _RouteAwarePageState createState() => _RouteAwarePageState();
}

class _RouteAwarePageState extends State<RouteAwarePage> with RouteAware {
  [@override](/user/override)
  void didChangeDependencies() {
    super.didChangeDependencies();
    MyApp.routeObserver.subscribe(this, ModalRoute.of(context)!);
  }

  [@override](/user/override)
  void dispose() {
    MyApp.routeObserver.unsubscribe(this);
    super.dispose();
  }

  [@override](/user/override)
  void didPush() {
    super.didPush();
    ScreenBrightnessPlatform.instance.setScreenBrightness(0.7);
  }

  [@override](/user/override)
  void didPushNext() {
    super.didPushNext();
    ScreenBrightnessPlatform.instance.resetScreenBrightness();
  }

  [@override](/user/override)
  void didPop() {
    super.didPop();
    ScreenBrightnessPlatform.instance.resetScreenBrightness();
  }

  [@override](/user/override)
  void didPopNext() {
    super.didPopNext();
    ScreenBrightnessPlatform.instance.setScreenBrightness(0.7);
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('路由感知'),
      ),
      body: Center(
        child: ElevatedButton(
          onPressed: () => Navigator.of(context).pushNamed(BlankPage.routeName),
          child: const Text('下一页'),
        ),
      ),
    );
  }
}

class BlankPage extends StatelessWidget {
  static const routeName = '/blankPage';

  const BlankPage({Key? key}) : super(key: key);

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('空白页'),
      ),
    );
  }
}

class SettingPage extends StatefulWidget {
  static const routeName = '/setting';

  const SettingPage({Key? key}) : super(key: key);

  [@override](/user/override)
  _SettingPageState createState() => _SettingPageState();
}

class _SettingPageState extends State<SettingPage> {
  bool isAutoReset = true;

  [@override](/user/override)
  void initState() {
    super.initState();
    getAutoResetSetting();
  }

  Future<void> getAutoResetSetting() async {
    final _isAutoReset = await ScreenBrightnessPlatform.instance.isAutoReset;
    setState(() {
      isAutoReset = _isAutoReset;
    });
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('设置'),
      ),
      body: ListView(
        children: [
          ListTile(
            title: const Text('自动重置'),
            trailing: Switch(
              value: isAutoReset,
              onChanged: Platform.isIOS ||
                      Platform.isWindows ||
                      Platform.isMacOS ||
                      Platform.isLinux
                  ? (value) async {
                      await ScreenBrightnessPlatform.instance
                          .setAutoReset(value);
                      await getAutoResetSetting();
                    }
                  : null,
            ),
          )
        ],
      ),
    );
  }
}

更多关于Flutter屏幕亮度控制插件screen_brightness_linux的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter屏幕亮度控制插件screen_brightness_linux的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


screen_brightness_linux 是一个用于在 Linux 平台上控制屏幕亮度的 Flutter 插件。它允许你在 Flutter 应用程序中获取和设置屏幕的亮度。以下是如何使用 screen_brightness_linux 插件的详细步骤。

1. 添加依赖

首先,你需要在 pubspec.yaml 文件中添加 screen_brightness_linux 插件的依赖。

dependencies:
  flutter:
    sdk: flutter
  screen_brightness_linux: ^latest_version

请将 ^latest_version 替换为最新的版本号。

2. 导入插件

在你的 Dart 文件中导入 screen_brightness_linux 插件。

import 'package:screen_brightness_linux/screen_brightness_linux.dart';

3. 获取和设置屏幕亮度

你可以使用 ScreenBrightnessLinux 类来获取和设置屏幕亮度。

获取当前亮度

final screenBrightness = ScreenBrightnessLinux();
double brightness = await screenBrightness.getBrightness();
print('Current brightness: $brightness');

设置屏幕亮度

final screenBrightness = ScreenBrightnessLinux();
await screenBrightness.setBrightness(0.5); // 设置亮度为 50%

4. 处理异常

由于屏幕亮度控制可能会失败(例如权限不足或设备不支持),建议在使用时捕获异常。

try {
  await screenBrightness.setBrightness(0.5);
} catch (e) {
  print('Failed to set brightness: $e');
}

5. 监听亮度变化

你还可以监听屏幕亮度的变化。

screenBrightness.brightnessStream.listen((brightness) {
  print('Brightness changed to: $brightness');
});

6. 权限

在 Linux 上,控制屏幕亮度可能需要特定的权限。确保你的应用程序有足够的权限来执行这些操作。

7. 示例代码

以下是一个完整的示例,展示了如何获取和设置屏幕亮度:

import 'package:flutter/material.dart';
import 'package:screen_brightness_linux/screen_brightness_linux.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: BrightnessControlPage(),
    );
  }
}

class BrightnessControlPage extends StatefulWidget {
  [@override](/user/override)
  _BrightnessControlPageState createState() => _BrightnessControlPageState();
}

class _BrightnessControlPageState extends State<BrightnessControlPage> {
  final ScreenBrightnessLinux screenBrightness = ScreenBrightnessLinux();
  double _brightness = 0.5;

  [@override](/user/override)
  void initState() {
    super.initState();
    _loadBrightness();
  }

  Future<void> _loadBrightness() async {
    try {
      double brightness = await screenBrightness.getBrightness();
      setState(() {
        _brightness = brightness;
      });
    } catch (e) {
      print('Failed to get brightness: $e');
    }
  }

  Future<void> _setBrightness(double brightness) async {
    try {
      await screenBrightness.setBrightness(brightness);
      setState(() {
        _brightness = brightness;
      });
    } catch (e) {
      print('Failed to set brightness: $e');
    }
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Screen Brightness Control'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            Text('Current Brightness: ${(_brightness * 100).toStringAsFixed(1)}%'),
            Slider(
              value: _brightness,
              onChanged: _setBrightness,
              min: 0.0,
              max: 1.0,
            ),
          ],
        ),
      ),
    );
  }
}
回到顶部