Пакет с лампой не включает фонарик после леденца, даже после разрешения в Flutter - PullRequest
0 голосов
/ 26 апреля 2019

Я делаю приложение, которое использует камеру и вспышку.Я установил разрешения для камеры в файле манифеста 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
...