Skip to content
Open
Show file tree
Hide file tree
Changes from 6 commits
Commits
Show all changes
34 commits
Select commit Hold shift + click to select a range
762a559
Implement camera switching for Android
ikbendewilliam Dec 7, 2021
c42e65a
Add method canChangeCamera
ikbendewilliam Dec 8, 2021
22d7372
Switch camera on iOS
herre Dec 9, 2021
7e5e25e
Fix build issue
ikbendewilliam Dec 9, 2021
dd764a8
Merge pull request #1 from ikbendewilliam/feature/can-switch-camera
ikbendewilliam Dec 9, 2021
8f5c69a
Fixed PR Comments
ikbendewilliam Dec 28, 2021
4ff1eee
Enable pause & resume on continuous scanning mode in iOS
rwillemsandroid Apr 21, 2022
4aca0cd
Merge pull request #2 from rwillemsandroid/feature/pause-resume-in-co…
ikbendewilliam Apr 21, 2022
c734a89
Update kotlin version
ikbendewilliam Jul 17, 2023
dfbd6ea
Flutter update
ikbendewilliam Oct 26, 2023
8a8f02d
renamed to icapps
jorre127 Nov 25, 2024
328f777
update android version
jorre127 Nov 25, 2024
6b44afb
fix android
jorre127 Nov 25, 2024
8bf93a3
fix ios
jorre127 Nov 25, 2024
b0eb637
updated changelog
jorre127 Nov 25, 2024
af1e57d
dart format
jorre127 Nov 25, 2024
d0830fa
updated version
jorre127 Nov 25, 2024
636425b
updated platform interface version
jorre127 Nov 25, 2024
351b145
Merge pull request #4 from jorre127/feature/android-update
jorre127 Nov 25, 2024
39cb4f2
publishing fix
jorre127 Nov 25, 2024
9e5c5ed
further rename
jorre127 Nov 25, 2024
69cb061
further rename to icapps
jorre127 Nov 25, 2024
c6e1a86
Merge pull request #5 from jorre127/feature/android-update
jorre127 Nov 25, 2024
35d7e48
added namespace
jorre127 Jun 27, 2025
bacfdab
Merge pull request #6 from icapps/feature/add-namespace
jorre127 Jun 27, 2025
546b9d0
Update dependencies
jorre127 Nov 5, 2025
fcb0c88
update plugin
jorre127 Nov 5, 2025
fb83485
updated package so it's 16kb compatible
jorre127 Nov 5, 2025
7ce6669
updated change log
jorre127 Nov 5, 2025
7b16b04
Merge pull request #7 from icapps/feature/update-dependencies
jorre127 Nov 6, 2025
f6791a3
possible fix for crash
jorre127 Nov 6, 2025
cfc959c
add import
jorre127 Nov 6, 2025
735b62b
update version
jorre127 Nov 6, 2025
b6025f9
Merge pull request #8 from icapps/feature/update-dependencies
jorre127 Nov 6, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ import java.util.ArrayList
import java.util.concurrent.ExecutorService
import java.util.concurrent.Executors

data class CameraConfig(val formats: IntArray, val mode: DetectionMode, val resolution: Resolution, val framerate: Framerate, val position: CameraPosition)
data class CameraConfig(val formats: IntArray, val mode: DetectionMode, val resolution: Resolution, val framerate: Framerate, var position: CameraPosition)

class BarcodeReader(private val flutterTextureEntry: TextureRegistry.SurfaceTextureEntry, private val listener: (List<Barcode>) -> Unit) : RequestPermissionsResultListener {
/* Android Lifecycle */
Expand Down Expand Up @@ -106,6 +106,28 @@ class BarcodeReader(private val flutterTextureEntry: TextureRegistry.SurfaceText
}, ContextCompat.getMainExecutor(activity))
}

fun canChangeCamera(result: Result) {
try {
val cameraProviderFuture = ProcessCameraProvider.getInstance(activity!!)
cameraProviderFuture.addListener(Runnable {
val cameraProviderForChangeCamera = cameraProviderFuture.get()
val hasFrontCamera = cameraProviderForChangeCamera.hasCamera(CameraSelector.DEFAULT_FRONT_CAMERA)
val hasBackCamera = cameraProviderForChangeCamera.hasCamera(CameraSelector.DEFAULT_BACK_CAMERA)
result.success(hasFrontCamera && hasBackCamera)
}, ContextCompat.getMainExecutor(activity!!))
} catch (exc: Exception) {
result.success(false)
}
}

fun changeCamera(position: String, result: Result) {
cameraConfig.position = when (position) {
"front" -> CameraPosition.front
else -> CameraPosition.back
}
initCamera()
}

private fun allPermissionsGranted() = REQUIRED_PERMISSIONS.all {
ContextCompat.checkSelfPermission(activity!!.applicationContext, it) == PackageManager.PERMISSION_GRANTED
}
Expand Down Expand Up @@ -148,12 +170,8 @@ class BarcodeReader(private val flutterTextureEntry: TextureRegistry.SurfaceText
// Select camera
val selectorBuilder = CameraSelector.Builder()
when (cameraConfig.position) {
CameraPosition.front -> {
selectorBuilder.requireLensFacing(CameraSelector.LENS_FACING_FRONT)
}
CameraPosition.back -> {
selectorBuilder.requireLensFacing(CameraSelector.LENS_FACING_BACK)
}
CameraPosition.front -> selectorBuilder.requireLensFacing(CameraSelector.LENS_FACING_FRONT)
CameraPosition.back -> selectorBuilder.requireLensFacing(CameraSelector.LENS_FACING_BACK)
}
cameraSelector = selectorBuilder.build()

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,8 @@ class FastBarcodeScannerPlugin: FlutterPlugin, MethodCallHandler, ActivityAware
"pause" -> reader.stop(result)
"resume" -> reader.resume(result)
"toggleTorch" -> reader.toggleTorch(result)
"canChangeCamera" -> reader.canChangeCamera(result)
"changeCamera" -> reader.changeCamera(call.arguments as String, result)
else -> result.notImplemented()
}
}
Expand Down
16 changes: 16 additions & 0 deletions fast_barcode_scanner/example/lib/scanner_screen.dart
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,17 @@ class ScannerScreen extends StatefulWidget {

class _ScannerScreenState extends State<ScannerScreen> {
final _torchIconState = ValueNotifier(false);
bool _canChangeCamera = false;

@override
void initState() {
super.initState();
_checkCanChangeCamera();
}

Future<void> _checkCanChangeCamera() async => setState(() async {
_canChangeCamera = await CameraController.instance.canChangeCamera();
});

@override
Widget build(BuildContext context) {
Expand Down Expand Up @@ -42,6 +53,11 @@ class _ScannerScreenState extends State<ScannerScreen> {
},
),
),
if (_canChangeCamera)
IconButton(
icon: const Icon(Icons.cameraswitch),
onPressed: CameraController.instance.toggleCamera,
),
],
),
body: BarcodeCamera(
Expand Down
5 changes: 5 additions & 0 deletions fast_barcode_scanner/example/pubspec.yaml
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
name: fast_barcode_scanner_example
description: Demonstrates how to use the fast_barcode_scanner plugin.
publish_to: 'none'
version: 0.0.1+1

environment:
sdk: '>=2.12.0 <3.0.0'
Expand All @@ -15,5 +16,9 @@ dependencies:
dev_dependencies:
flutter_lints: ^1.0.4

dependency_overrides:
fast_barcode_scanner_platform_interface:
path: ../../fast_barcode_scanner_platform_interface/

flutter:
uses-material-design: true
Loading