Flutter屏幕亮度控制插件screen_brightness_android的使用
Flutter屏幕亮度控制插件screen_brightness_android的使用
使用
该包是被官方推荐使用的,这意味着你只需要简单地使用 screen_brightness
包即可。当你这样做时,这个包会自动包含在你的应用中。
示例代码
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({super.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({super.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.application,
builder: (context, snapshot) {
double applicationBrightness = 0;
if (snapshot.hasData) {
applicationBrightness = snapshot.data!;
}
return StreamBuilder<double>(
stream: ScreenBrightnessPlatform
.instance.onApplicationScreenBrightnessChanged,
builder: (context, snapshot) {
double changedApplicationBrightness = applicationBrightness;
if (snapshot.hasData) {
changedApplicationBrightness = snapshot.data!;
}
return Text(
'应用亮度 $changedApplicationBrightness');
},
);
},
),
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({super.key});
[@override](/user/override)
State<ControllerPage> createState() => _ControllerPageState();
}
class _ControllerPageState extends State<ControllerPage> {
Future<void> setSystemBrightness(double brightness) async {
try {
await ScreenBrightnessPlatform.instance
.setSystemScreenBrightness(brightness);
} catch (e) {
debugPrint(e.toString());
throw 'Failed to set system brightness';
}
}
Future<void> setApplicationBrightness(double brightness) async {
try {
await ScreenBrightnessPlatform.instance
.setApplicationScreenBrightness(brightness);
} catch (e) {
debugPrint(e.toString());
throw 'Failed to set application brightness';
}
}
Future<void> resetApplicationBrightness() async {
try {
await ScreenBrightnessPlatform.instance
.resetApplicationScreenBrightness();
} catch (e) {
debugPrint(e.toString());
throw 'Failed to reset application brightness';
}
}
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text('控制器'),
),
body: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
FutureBuilder<double>(
future: ScreenBrightnessPlatform.instance.system,
builder: (context, snapshot) {
double systemBrightness = 0;
if (snapshot.hasData) {
systemBrightness = snapshot.data!;
}
return StreamBuilder<double>(
stream: ScreenBrightnessPlatform
.instance.onSystemScreenBrightnessChanged,
builder: (context, snapshot) {
double changedSystemBrightness = systemBrightness;
if (snapshot.hasData) {
changedSystemBrightness = snapshot.data!;
}
return Column(
mainAxisSize: MainAxisSize.min,
children: [
Text('系统亮度: $changedSystemBrightness'),
Slider.adaptive(
value: changedSystemBrightness,
onChanged: (value) {
setSystemBrightness(value);
},
),
],
);
});
},
),
FutureBuilder<double>(
future: ScreenBrightnessPlatform.instance.application,
builder: (context, snapshot) {
double applicationBrightness = 0;
if (snapshot.hasData) {
applicationBrightness = snapshot.data!;
}
return StreamBuilder<double>(
stream: ScreenBrightnessPlatform
.instance.onApplicationScreenBrightnessChanged,
builder: (context, snapshot) {
double changedApplicationBrightness = applicationBrightness;
if (snapshot.hasData) {
changedApplicationBrightness = snapshot.data!;
}
return Column(
mainAxisSize: MainAxisSize.min,
children: [
FutureBuilder<bool>(
future: ScreenBrightnessPlatform
.instance.hasApplicationScreenBrightnessChanged,
builder: (context, snapshot) {
return Text(
'应用亮度已通过插件更改: ${snapshot.data}');
},
),
Text(
'应用亮度: $changedApplicationBrightness'),
Slider.adaptive(
value: changedApplicationBrightness,
onChanged: (value) {
setApplicationBrightness(value);
},
),
ElevatedButton(
onPressed: () {
resetApplicationBrightness();
},
child: const Text('重置亮度'),
),
],
);
},
);
},
),
],
),
);
}
}
class RouteAwarePage extends StatefulWidget {
static const routeName = '/routeAware';
const RouteAwarePage({super.key});
[@override](/user/override)
State<RouteAwarePage> 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.setApplicationScreenBrightness(0.7);
}
[@override](/user/override)
void didPushNext() {
super.didPushNext();
ScreenBrightnessPlatform.instance.resetApplicationScreenBrightness();
}
[@override](/user/override)
void didPop() {
super.didPop();
ScreenBrightnessPlatform.instance.resetApplicationScreenBrightness();
}
[@override](/user/override)
void didPopNext() {
super.didPopNext();
ScreenBrightnessPlatform.instance.setApplicationScreenBrightness(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({super.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({super.key});
[@override](/user/override)
State<SettingPage> createState() => _SettingPageState();
}
class _SettingPageState extends State<SettingPage> {
bool isAutoReset = true;
bool isAnimate = true;
bool canChangeSystemBrightness = true;
[@override](/user/override)
void initState() {
super.initState();
getIsAutoResetSetting();
getIsAnimateSetting();
getCanChangeSystemBrightness();
}
Future<void> getIsAutoResetSetting() async {
final isAutoReset = await ScreenBrightnessPlatform.instance.isAutoReset;
setState(() {
this.isAutoReset = isAutoReset;
});
}
Future<void> getIsAnimateSetting() async {
final isAnimate = await ScreenBrightnessPlatform.instance.isAnimate;
setState(() {
this.isAnimate = isAnimate;
});
}
Future<void> getCanChangeSystemBrightness() async {
final canChangeSystemBrightness =
await ScreenBrightnessPlatform.instance.canChangeSystemBrightness;
setState(() {
this.canChangeSystemBrightness = canChangeSystemBrightness;
});
}
[@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: (value) async {
await ScreenBrightnessPlatform.instance.setAutoReset(value);
await getIsAutoResetSetting();
},
),
),
ListTile(
title: const Text('动画'),
trailing: Switch(
value: isAnimate,
onChanged: (value) async {
await ScreenBrightnessPlatform.instance.setAnimate(value);
await getIsAnimateSetting();
},
),
),
ListTile(
title: const Text('可以改变系统亮度'),
trailing: Switch(
value: canChangeSystemBrightness,
onChanged: (value) {},
),
),
],
),
);
}
}
更多关于Flutter屏幕亮度控制插件screen_brightness_android的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter屏幕亮度控制插件screen_brightness_android的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是如何在Flutter项目中使用screen_brightness_android
插件来控制Android设备屏幕亮度的代码示例。
首先,确保你的Flutter项目已经创建,并且你已经在pubspec.yaml
文件中添加了screen_brightness_android
依赖项:
dependencies:
flutter:
sdk: flutter
screen_brightness_android: ^0.x.x # 请使用最新版本号替换这里的0.x.x
然后,运行flutter pub get
来获取依赖项。
接下来,你可以在你的Flutter项目中使用这个插件。以下是一个简单的示例,展示了如何调整屏幕亮度:
- 导入插件:
在你的Dart文件中(例如main.dart
),导入screen_brightness_android
插件:
import 'package:screen_brightness_android/screen_brightness_android.dart';
import 'package:flutter/material.dart';
- 创建UI和控制逻辑:
下面是一个完整的示例,其中包含一个滑块(Slider)用于调整屏幕亮度:
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Screen Brightness Control',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: BrightnessControlScreen(),
);
}
}
class BrightnessControlScreen extends StatefulWidget {
@override
_BrightnessControlScreenState createState() => _BrightnessControlScreenState();
}
class _BrightnessControlScreenState extends State<BrightnessControlScreen> {
double _brightness = 1.0; // 初始亮度为1.0(最大亮度)
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Screen Brightness Control'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text(
'Current Brightness: $_brightness',
style: TextStyle(fontSize: 20),
),
SizedBox(height: 20),
Slider(
value: _brightness,
min: 0.0,
max: 1.0,
divisions: 10,
onChanged: (newValue) {
setState(() {
_brightness = newValue;
// 设置屏幕亮度
ScreenBrightnessAndroid.setBrightness(_brightness);
});
},
),
],
),
),
);
}
}
在这个示例中,我们创建了一个简单的Flutter应用,其中包含一个Slider
控件,用于调整屏幕亮度。滑块的值范围从0.0(完全关闭)到1.0(最大亮度)。每当滑块的值改变时,我们都会调用ScreenBrightnessAndroid.setBrightness
方法来设置新的屏幕亮度。
请注意,这个插件仅适用于Android设备。如果你在iOS上运行这个代码,它将不会生效,因为iOS对屏幕亮度的控制有不同的API和权限要求。
确保你在AndroidManifest.xml文件中添加了必要的权限(虽然screen_brightness_android
插件通常会自动处理这些权限):
<uses-permission android:name="android.permission.WRITE_SETTINGS"/>
并且,对于Android 6.0(API级别23)及以上版本,你还需要在运行时请求WRITE_SETTINGS
权限。这个插件的文档应该会有关于如何处理这些权限的更多信息。