Toggle navigation
Toggle navigation
This project
Loading...
Sign in
flutter_package
/
mobile_scanner
Go to a project
Toggle navigation
Projects
Groups
Snippets
Help
Toggle navigation pinning
Project
Activity
Repository
Pipelines
Graphs
Issues
0
Merge Requests
0
Wiki
Network
Create a new issue
Builds
Commits
Authored by
Navaron Bracke
2023-11-08 11:52:04 +0100
Browse Files
Options
Browse Files
Download
Email Patches
Plain Diff
Commit
c3ea41fa6fd047732b8416b70a44e6f053f08e9b
c3ea41fa
1 parent
74000134
let analyzeImage return the barcode directly from native
Show whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
25 additions
and
24 deletions
android/src/main/kotlin/dev/steenbakker/mobile_scanner/MobileScanner.kt
android/src/main/kotlin/dev/steenbakker/mobile_scanner/MobileScannerCallbacks.kt
android/src/main/kotlin/dev/steenbakker/mobile_scanner/MobileScannerHandler.kt
ios/Classes/MobileScannerPlugin.swift
android/src/main/kotlin/dev/steenbakker/mobile_scanner/MobileScanner.kt
View file @
c3ea41f
...
...
@@ -78,7 +78,7 @@ class MobileScanner(
scanner.process(inputImage)
.addOnSuccessListener { barcodes ->
if (detectionSpeed == DetectionSpeed.NO_DUPLICATES) {
val newScannedBarcodes = barcodes.mapNotNull
({ barcode -> barcode.rawValue })
.sorted()
val newScannedBarcodes = barcodes.mapNotNull
{ barcode -> barcode.rawValue }
.sorted()
if (newScannedBarcodes == lastScanned) {
// New scanned is duplicate, returning
return@addOnSuccessListener
...
...
@@ -424,7 +424,7 @@ class MobileScanner(
/**
* Analyze a single image.
*/
fun analyzeImage(image: Uri,
analyzerCallback: Analyze
rCallback) {
fun analyzeImage(image: Uri,
onSuccess: AnalyzerSuccessCallback, onError: AnalyzerErro
rCallback) {
val inputImage = InputImage.fromFilePath(activity, image)
scanner.process(inputImage)
...
...
@@ -432,15 +432,13 @@ class MobileScanner(
val barcodeMap = barcodes.map { barcode -> barcode.data }
if (barcodeMap.isNotEmpty()) {
analyzerCallback
(barcodeMap)
onSuccess
(barcodeMap)
} else {
analyzerCallback
(null)
onSuccess
(null)
}
}
.addOnFailureListener { e ->
mobileScannerErrorCallback(
e.localizedMessage ?: e.toString()
)
onError(e.localizedMessage ?: e.toString())
}
}
...
...
android/src/main/kotlin/dev/steenbakker/mobile_scanner/MobileScannerCallbacks.kt
View file @
c3ea41f
...
...
@@ -3,7 +3,8 @@ package dev.steenbakker.mobile_scanner
import dev.steenbakker.mobile_scanner.objects.MobileScannerStartParameters
typealias MobileScannerCallback = (barcodes: List<Map<String, Any?>>, image: ByteArray?, width: Int?, height: Int?) -> Unit
typealias AnalyzerCallback = (barcodes: List<Map<String, Any?>>?) -> Unit
typealias AnalyzerErrorCallback = (message: String) -> Unit
typealias AnalyzerSuccessCallback = (barcodes: List<Map<String, Any?>>?) -> Unit
typealias MobileScannerErrorCallback = (error: String) -> Unit
typealias TorchStateCallback = (state: Int) -> Unit
typealias ZoomScaleStateCallback = (zoomScale: Double) -> Unit
...
...
android/src/main/kotlin/dev/steenbakker/mobile_scanner/MobileScannerHandler.kt
View file @
c3ea41f
...
...
@@ -26,16 +26,19 @@ class MobileScannerHandler(
private val addPermissionListener: (RequestPermissionsResultListener) -> Unit,
textureRegistry: TextureRegistry): MethodChannel.MethodCallHandler {
private val analyzerCallback: AnalyzerCallback = { barcodes: List<Map<String, Any?>>?->
if (barcodes != null) {
barcodeHandler.publishEvent(mapOf(
"name" to "barcode",
"data" to barcodes
))
private val analyzeImageErrorCallback: AnalyzerErrorCallback = {
Handler(Looper.getMainLooper()).post {
analyzerResult?.error("MobileScanner", it, null)
analyzerResult = null
}
}
private val analyzeImageSuccessCallback: AnalyzerSuccessCallback = {
Handler(Looper.getMainLooper()).post {
analyzerResult?.success(barcodes != null)
analyzerResult?.success(mapOf(
"name" to "barcode",
"data" to it
))
analyzerResult = null
}
}
...
...
@@ -236,7 +239,8 @@ class MobileScannerHandler(
private fun analyzeImage(call: MethodCall, result: MethodChannel.Result) {
analyzerResult = result
val uri = Uri.fromFile(File(call.arguments.toString()))
mobileScanner!!.analyzeImage(uri, analyzerCallback)
mobileScanner!!.analyzeImage(uri, analyzeImageSuccessCallback, analyzeImageErrorCallback)
}
private fun toggleTorch(call: MethodCall, result: MethodChannel.Result) {
...
...
ios/Classes/MobileScannerPlugin.swift
View file @
c3ea41f
...
...
@@ -245,12 +245,12 @@ public class MobileScannerPlugin: NSObject, FlutterPlugin {
return
}
mobileScanner
.
analyzeImage
(
image
:
uiImage
!
,
position
:
AVCaptureDevice
.
Position
.
back
,
callback
:
{
[
self
]
barcodes
,
error
in
mobileScanner
.
analyzeImage
(
image
:
uiImage
!
,
position
:
AVCaptureDevice
.
Position
.
back
,
callback
:
{
barcodes
,
error
in
if
error
!=
nil
{
barcodeHandler
.
publishEvent
([
"name"
:
"error"
,
"message"
:
error
?
.
localizedDescription
])
DispatchQueue
.
main
.
async
{
result
(
false
)
result
(
FlutterError
(
code
:
"MobileScanner"
,
message
:
error
?
.
localizedDescription
,
details
:
nil
))
}
return
...
...
@@ -258,15 +258,13 @@ public class MobileScannerPlugin: NSObject, FlutterPlugin {
if
(
barcodes
==
nil
||
barcodes
!.
isEmpty
)
{
DispatchQueue
.
main
.
async
{
result
(
false
)
result
(
nil
)
}
}
else
{
let
barcodesMap
:
[
Any
?]
=
barcodes
!.
compactMap
{
barcode
in
barcode
.
data
}
let
event
:
[
String
:
Any
?]
=
[
"name"
:
"barcode"
,
"data"
:
barcodesMap
]
barcodeHandler
.
publishEvent
(
event
)
DispatchQueue
.
main
.
async
{
result
(
true
)
result
(
[
"name"
:
"barcode"
,
"data"
:
barcodesMap
]
)
}
}
})
...
...
Please
register
or
login
to post a comment