我正在开发一个内部带有条形码读取器的应用程序。我目前正在使用flutter_camera_ml_vision软件包。
我正在尝试添加一个闪光灯开/关浮动按钮,但是我不能在相机运行时激活闪光灯,只能在此之前。 错误:
I/System.out(19394): Torch Failed : CAMERA_IN_USE (4): setTorchMode:1732: Torch for camera "0" is not available due to an existing camera user
当照相机弹出时,闪光灯也会被禁用。
我该如何实现?我正在Android上进行测试。
当前代码:
import 'package:firebase_ml_vision/firebase_ml_vision.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter/widgets.dart';
import 'package:flutter_camera_ml_vision/flutter_camera_ml_vision.dart';
import 'package:camera/camera.dart';
import 'package:torch/torch.dart';
class ScanPage extends StatefulWidget {
@override
_ScanPageState createState() => _ScanPageState();
}
class _ScanPageState extends State<ScanPage> {
bool resultSent = false;
bool _hasFlash = true;
bool _isOn = false;
@override
void initState() {
super.initState();
SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp]);
initPlatformState();
}
@override
dispose() {
SystemChrome.setPreferredOrientations([
DeviceOrientation.landscapeRight,
DeviceOrientation.landscapeLeft,
DeviceOrientation.portraitUp,
DeviceOrientation.portraitDown,
]);
super.dispose();
}
initPlatformState() async {
bool hasFlash = await Torch.hasTorch;
print("Device has flash ? $hasFlash");
setState(() { _hasFlash = hasFlash; });
}
@override
Widget build(BuildContext context) {
return Scaffold(
floatingActionButton: FloatingActionButton(
onPressed: () async {
await _turnFlash();
},
child: Icon(_isOn ? Icons.flash_off : Icons.flash_on),
backgroundColor: Colors.green,
),
body: SafeArea(
child: SizedBox(
width: MediaQuery.of(context).size.width,
height: MediaQuery.of(context).size.height,
child: CameraMlVision<List<Barcode>>(
resolution: ResolutionPreset.medium,
detector: FirebaseVision.instance.barcodeDetector().detectInImage,
onResult: (List<Barcode> barcodes) {
if (!mounted || resultSent || barcodes.isEmpty) {
return;
}
resultSent = true;
Navigator.of(context).pop<Barcode>(barcodes.first);
},
),
),
),
);
}
Future _turnFlash() async {
_isOn ? Torch.turnOff() : Torch.turnOn();
var f = await Torch.hasTorch;
setState((){
_hasFlash = f;
_isOn = !_isOn;
});
}
}
答案 0 :(得分:0)
我确认@tottomotto在评论中说了什么。 camera
插件中目前缺少该功能,torch
给您带来错误的原因是,只能通过控制相机来控制闪光灯,而显然相机已经由插件打开了。
唯一的方法是实现所请求的功能,如the issue所说的:(