multicamera 1.3.7
multicamera: ^1.3.7 copied to clipboard
A Flutter plugin for managing multiple camera instances simultaneously with built-in ML kit support.
Multicamera #
A Flutter plugin for managing multiple camera instances simultaneously with built-in ML kit support.
Features #
- Multiple simultaneous cameras - Run multiple camera instances at the same time
- Image capture - Capture images from any camera instance
- Front/Back camera support - Easy switching between camera directions
- Text recognition - Real-time text recognition using MLKit
- Barcode scanning - Detect and scan various barcode formats
- Face detection - Real-time face detection capabilities
- Cross-platform - Supports both iOS and Android
Installation #
Add this to your package's pubspec.yaml file:
dependencies:
multicamera: ^1.3.7
Or install from the repository:
dependencies:
multicamera:
git:
url: https://github.com/alexdempster44/multicamera.git
Then run:
flutter pub get
Platform Setup #
iOS #
Add the following keys to your ios/Runner/Info.plist:
<key>NSCameraUsageDescription</key>
<string>This app needs camera access to capture photos and video</string>
Android #
Add the following permissions to your android/app/src/main/AndroidManifest.xml:
<uses-permission android:name="android.permission.CAMERA" />
Permissions #
Important: This plugin does not handle camera permission requests. It is the developer's responsibility to request and ensure that camera permissions have been granted before calling camera.initialize().
You can use the permission_handler package or platform-specific permission APIs to request camera access:
import 'package:permission_handler/permission_handler.dart';
// Request camera permission before initializing
final status = await Permission.camera.request();
if (!status.isGranted) {
// Handle permission denied
return;
}
await camera.initialize();
Usage #
Basic Camera Setup #
import 'package:multicamera/multicamera.dart';
// Create a camera instance
final camera = Camera(
direction: CameraDirection.front,
paused: false,
);
// Initialize the camera
await camera.initialize();
Display Camera Preview #
import 'package:flutter/material.dart';
import 'package:multicamera/multicamera.dart';
class CameraScreen extends StatefulWidget {
@override
State<CameraScreen> createState() => _CameraScreenState();
}
class _CameraScreenState extends State<CameraScreen> {
late final Camera camera;
@override
void initState() {
super.initState();
camera = Camera(direction: CameraDirection.front);
camera.initialize();
}
@override
Widget build(BuildContext context) {
return CameraPreview(
camera: camera,
mirror: true, // Mirror the preview (only affects the front camera)
crop: false, // Fit or crop the preview to the available space
);
}
@override
void dispose() {
camera.dispose();
super.dispose();
}
}
Capture Images #
// Capture an image from the camera
Uint8List? imageData = await camera.captureImage();
if (imageData case final data?) {
Image.memory(data); // Display the image
}
Multiple Cameras #
// Create multiple camera instances
final frontCamera = Camera(direction: CameraDirection.front);
final backCamera = Camera(direction: CameraDirection.back);
await frontCamera.initialize();
await backCamera.initialize();
// Display both previews
Row(
children: [
Expanded(child: CameraPreview(camera: frontCamera)),
Expanded(child: CameraPreview(camera: backCamera)),
],
);
Text Recognition #
final camera = Camera(direction: CameraDirection.back);
// Set up text recognition callback
camera.onTextRecognized = (List<String> recognizedText) {
print('Recognized text: $recognizedText');
};
await camera.initialize();
Barcode Scanning #
final camera = Camera(direction: CameraDirection.back);
// Set up barcode scanning callback
camera.onBarcodesScanned = (List<String> barcodes) {
print('Scanned barcodes: $barcodes');
};
await camera.initialize();
Face Detection #
final camera = Camera(direction: CameraDirection.front);
// Set up face detection callback
camera.onFaceDetected = (bool faceDetected) {
print('Face detected: $faceDetected');
};
await camera.initialize();
Change Camera Settings #
// Change camera direction
camera.direction = CameraDirection.back;
// Pause/resume camera
camera.paused = true; // Pause
camera.paused = false; // Resume
Example #
See the example directory for a complete sample application demonstrating multiple cameras, image capture, and ML features.
License #
This is free and unencumbered software released into the public domain. See the LICENSE file for details.