Чтобы настроить яркость системы в приложении Flutter, вы можете использовать код, специфичный для платформы, для взаимодействия с базовыми собственными API. Вот несколько методов с примерами кода:
Метод 1: использование пакета screen_brightness.
В этом методе используется пакет screen_brightness, который предоставляет кроссплатформенное решение для настройки яркости экрана во Flutter.
Метод 1. Использование пакета screen_brightness.р>
Сначала добавьте пакет screen_brightnessв файл pubspec.yaml:
dependencies:
screen_brightness: ^1.0.0
Затем вы можете использовать методы пакета для регулировки яркости. Вот пример:
import 'package:flutter/material.dart';
import 'package:screen_brightness/screen_brightness.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('Adjust Brightness'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
ElevatedButton(
onPressed: () async {
// Get the current brightness
double currentBrightness = await ScreenBrightness.current;
// Set the brightness to a desired value (0.0 to 1.0)
await ScreenBrightness.setScreenBrightness(0.5);
},
child: Text('Adjust Brightness'),
),
],
),
),
),
);
}
}
Не забудьте импортировать необходимые пакеты и запустить flutter pub get, чтобы загрузить их.
Метод 2. Использование каналов платформы.
Этот метод предполагает использование каналов платформы для взаимодействия с собственным кодом. Это требует настройки кода, специфичного для каждой поддерживаемой платформы.
Сначала определите интерфейс платформы в Dart:
import 'package:flutter/services.dart';
class SystemBrightness {
static const MethodChannel _channel =
MethodChannel('system_brightness');
static Future<double> getCurrentBrightness() async {
final brightness =
await _channel.invokeMethod<double>('getCurrentBrightness');
return brightness ?? 1.0;
}
static Future<void> setBrightness(double brightness) async {
await _channel.invokeMethod<void>('setBrightness', brightness);
}
}
Затем реализуйте код, специфичный для каждой платформы (Android и iOS), используя соответствующие собственные API.
Для Android:
Создайте новый файл Kotlin (SystemBrightnessPlugin.kt) и добавьте следующий код:
package com.example.system_brightness
import android.content.ContentResolver
import android.content.Context
import android.provider.Settings
import io.flutter.embedding.engine.plugins.FlutterPlugin
import io.flutter.plugin.common.MethodCall
import io.flutter.plugin.common.MethodChannel
import io.flutter.plugin.common.PluginRegistry.Registrar
class SystemBrightnessPlugin : FlutterPlugin, MethodChannel.MethodCallHandler {
private lateinit var context: Context
private lateinit var channel: MethodChannel
override fun onAttachedToEngine(binding: FlutterPlugin.FlutterPluginBinding) {
context = binding.applicationContext
channel = MethodChannel(binding.binaryMessenger, "system_brightness")
channel.setMethodCallHandler(this)
}
companion object {
@JvmStatic
fun registerWith(registrar: Registrar) {
val channel = MethodChannel(registrar.messenger(), "system_brightness")
val plugin = SystemBrightnessPlugin()
plugin.context = registrar.context()
channel.setMethodCallHandler(plugin)
}
}
override fun onDetachedFromEngine(binding: FlutterPlugin.FlutterPluginBinding) {
channel.setMethodCallHandler(null)
}
override fun onMethodCall(call: MethodCall, result: MethodChannel.Result) {
when (call.method) {
"getCurrentBrightness" -> result.success(getCurrentBrightness())
"setBrightness" -> {
val brightness = call.arguments as Double
setBrightness(brightness)
result.success(null)
}
else -> result.notImplemented()
}
}
private fun getCurrentBrightness(): Double {
return try {
val resolver: ContentResolver = context.contentResolver
val brightness = Settings.System.getInt(resolver, Settings.System.SCREEN_BRIGHTNESS)
brightness / 255.0
} catch (e: Exception) {
1.0
}
}
private fun setBrightness(brightness: Double) {
try {
val brightnessValue = (brightness * 255).toInt()
val resolver: ContentResolver = context.contentResolver
Settings.System.putInt(resolver, Settings.System.SCREEN_BRIGHTNESS, brightnessValue)
} catch (e: Exception) {
e.printStackTrace()
}
}
}
Для iOS:
Создайте новый файл Swift (SystemBrightnessPlugin.swift) и добавьте следующий код:
import Flutter
import UIKit
public class SystemBrightnessPlugin: NSObject, FlutterPlugin {
public static func register(with registrar: FlutterPluginRegistrar) {
let channel = FlutterMethodChannel(name: "system_brightness", binaryMessenger: registrar.messenger())
let instance = SystemBrightnessPlugin()
registrar.addMethodCallDelegate(instance, channel: channel)
}
public func handle(_ call: FlutterMethodCall, result: @escaping FlutterResult) {
switch call.method {
case "getCurrentBrightness":
result(getCurrentBrightness())
case "setBrightness":
if let brightness = call.arguments as? Double {
setBrightness(brightness: brightness)
}
result(nil)
default:
result(FlutterMethodNotImplemented)
}
}
private func getCurrentBrightness() -> Double {
return Float(UIScreen.main.brightness)
}
private func setBrightness(brightness: Double) {
UIScreen.main.brightness = CGFloat(brightness)
}
}
В коде Dart используйте класс SystemBrightnessдля регулировки яркости:
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('Adjust Brightness'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
ElevatedButton(
onPressed: () async {
// Get the current brightness
double currentBrightness =
await SystemBrightness.getCurrentBrightness();
print('Current Brightness: $currentBrightness');
// Set the brightness to a desired value (0.0 to 1.0)
SystemBrightness.setBrightness(0.5);
},
child: Text('Adjust Brightness'),
),
],
),
),
),
);
}
}
Обязательно включите необходимые операторы импорта и запустите flutter pub get, чтобы загрузить необходимые пакеты.