Navaron Bracke

only set the torch mode on MacOS if it would change

@@ -321,14 +321,20 @@ public class MobileScannerPlugin: NSObject, FlutterPlugin, FlutterStreamHandler, @@ -321,14 +321,20 @@ public class MobileScannerPlugin: NSObject, FlutterPlugin, FlutterStreamHandler,
321 } 321 }
322 322
323 func toggleTorch(_ call: FlutterMethodCall, _ result: @escaping FlutterResult) { 323 func toggleTorch(_ call: FlutterMethodCall, _ result: @escaping FlutterResult) {
324 - if (device == nil) { 324 + if (device == nil || !device.hasTorch || !device.isTorchAvailable) {
325 result(nil) 325 result(nil)
326 return 326 return
327 } 327 }
  328 +
  329 + let requestedTorchMode: AVCaptureDevice.TorchMode = call.arguments as! Int == 1 ? .on : .off
  330 +
328 do { 331 do {
  332 + if (device.torchMode != requestedTorchMode) {
329 try device.lockForConfiguration() 333 try device.lockForConfiguration()
330 - device.torchMode = call.arguments as! Int == 1 ? .on : .off 334 + device.torchMode = requestedTorchMode
331 device.unlockForConfiguration() 335 device.unlockForConfiguration()
  336 + }
  337 +
332 result(nil) 338 result(nil)
333 } catch { 339 } catch {
334 result(FlutterError(code: error.localizedDescription, message: nil, details: nil)) 340 result(FlutterError(code: error.localizedDescription, message: nil, details: nil))