Я делаю приложение, которое использует камеру и вспышку.Я установил разрешения для камеры в файле манифеста Android и выполнил код для запуска Flash одним нажатием кнопки, но не смог включить флэш на устройствах Post Lollipop.Работает нормально до леденцов.Я поставил разрешение на доступ к камере, но все еще не получил результат.Пожалуйста помоги.Мне добавили код, который я завершил.
import 'package:flutter/material.dart';
import 'package:lamp/lamp.dart';
import 'dart:async';
import 'package:permission/permission.dart';
import 'dart:io' show Platform;
void main() => runApp(new MyApp());
class MyApp extends StatefulWidget {
@override
_MyAppState createState() => new _MyAppState();
}
class _MyAppState extends State<MyApp> {
bool _hasFlash = false;
bool _isOn = false;
double _intensity = 1.0;
String platform;
@override
initState() {
super.initState();
initPlatformState();
initplatform();
}
//its just for getting the platform version
initplatform() async {
if (Platform.isIOS) {
platform = "IOS";
print('is a IOS');
} else if (Platform.isAndroid) {
platform = "Android";
print('is a Android');
//requestAndroidPermissions();
}
}
initPlatformState() async {
bool hasFlash = await Lamp.hasLamp;
print("Device has flash ? $hasFlash");
setState(() { _hasFlash = hasFlash; });
}
checkAndroidCameraPermissions() {
getCameraPermissionStatus();
}
getCameraPermissionStatus() async {
var get = '';
List<Permissions> permissions = await Permission.getPermissionsStatus([PermissionName.Camera,]);
permissions.forEach((permission) {
get += '${permission.permissionName}: ${permission.permissionStatus}';
if (get != "PermissionName.Camera: PermissionStatus.allow") {
requestCameraPermission();
} else {
//_turnFlash();
Lamp.turnOn(intensity:1.0);
}
});
}
requestCameraPermission() async {
final res = await Permission.requestPermissions([PermissionName.Camera]);
res.forEach((permission) {
String a = '${permission.permissionStatus}';
setState(() {
if (a == 'PermissionStatus.allow') {
//RestartWidget.restartApp(context).
//_turnFlash();
Lamp.turnOn(intensity:1.0);
}
else {
Permission.openSettings;
}
});
});
}
@override
Widget build(BuildContext context) {
return new MaterialApp(
theme: new ThemeData(primarySwatch: Colors.pink),
home: new Scaffold(
appBar: new AppBar(title: new Text('Lamp plugin example')),
body: new Center(
child: new Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
new Text('Device has flash: $_hasFlash\n Flash is on: $_isOn'),
new Slider(value: _intensity, onChanged: _isOn ? _intensityChanged : null),
new RaisedButton(onPressed: () async => await Lamp.flash(new Duration(seconds: 2)), child: new Text("Flash for 2 seconds"))
]),
),
floatingActionButton: new FloatingActionButton(
child: new Icon(_isOn ? Icons.flash_off : Icons.flash_on),
onPressed:()
//Comment the if code if you want run it in lollipop device
//for post lollipop device
{
if (platform == 'Android') {
requestCameraPermission();
}else{
Lamp.turnOn(intensity:1.0);
}
}
//for pre lollipop devi e
//_turnFlash
),
),
);
}
Future _turnFlash() async {
_isOn ? Lamp.turnOff() : Lamp.turnOn(intensity: _intensity);
var f = await Lamp.hasLamp;
setState((){
_hasFlash = f;
_isOn = !_isOn;
});
}
_intensityChanged(double intensity) {
Lamp.turnOn(intensity : intensity);
setState((){
_intensity = intensity;
});
}
}
Добавлено ниже разрешение для Android
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.FLASHLIGHT"/>
<uses-feature android:name="android.hardware.camera2" />
<uses-feature android:name="android.hardware.camera" />
<uses-feature android:name="android.hardware.camera.autofocus" />
Плагин для лампы и разрешение
lamp: ^0.0.6 permission: ^0.1.1