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
更多关于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,
),
],
),
),
);
}
}