【发布时间】:2019-11-29 15:50:10
【问题描述】:
我正在开发一个内置条形码阅读器的应用。我目前使用的是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;
});
}
}
【问题讨论】:
标签: android flutter dart firebase-mlkit