camfocus 0.2.7
camfocus: ^0.2.7 copied to clipboard
A Flutter plugin to control the camera's focus distance, autofocus, and zoom levels (0.5x, 1x, etc.) on Android devices.
example/lib/main.dart
import 'package:flutter/material.dart';
import 'dart:async';
import 'package:flutter/services.dart';
import 'package:camfocus/camfocus.dart';
void main() {
runApp(CameraApp());
}
class CameraApp extends StatefulWidget {
@override
_CameraAppState createState() => _CameraAppState();
}
class _CameraAppState extends State<CameraApp> {
static const MethodChannel _channel = MethodChannel('camfocus');
bool _isCameraReady = false;
double _focusDistance = 0.0;
bool _autoFocusEnabled = true;
double _zoomFactor = 1.0;
String _photoPath = "";
@override
void initState() {
super.initState();
_initializeCamera();
}
Future<void> _initializeCamera() async {
try {
bool cameraReady = await _channel.invokeMethod('initializeCamera');
setState(() {
_isCameraReady = cameraReady;
});
} catch (e) {
print('Erro ao inicializar a câmera: $e');
}
}
Future<void> _setFocusDistance(double distance) async {
try {
await _channel.invokeMethod('setFocusDistance', {'distance': distance});
setState(() {
_focusDistance = distance;
});
} catch (e) {
print('Erro ao ajustar a distância de foco: $e');
}
}
Future<void> _setAutoFocus(bool enabled) async {
try {
await _channel.invokeMethod('setAutoFocus', {'enabled': enabled});
setState(() {
_autoFocusEnabled = enabled;
});
} catch (e) {
print('Erro ao ajustar o foco automático: $e');
}
}
Future<void> _setZoom(double zoomFactor) async {
try {
await _channel.invokeMethod('setZoom', {'zoomFactor': zoomFactor});
setState(() {
_zoomFactor = zoomFactor;
});
} catch (e) {
print('Erro ao ajustar o zoom: $e');
}
}
Future<void> _takePicture() async {
try {
String path = await _channel.invokeMethod('takePicture');
setState(() {
_photoPath = path;
});
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(content: Text('Foto salva em: $_photoPath')),
);
} catch (e) {
print('Erro ao capturar foto: $e');
}
}
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('Controle da Câmera'),
),
body: Column(
children: [
if (_isCameraReady)
AspectRatio(
aspectRatio: 16 / 9,
child: AndroidView(
viewType: 'camfocus_preview',
),
),
SizedBox(height: 20),
Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text('Foco Manual: '),
Slider(
value: _focusDistance,
min: 0.0,
max: 10.0,
divisions: 100,
onChanged: _isCameraReady ? _setFocusDistance : null,
),
Text('${_focusDistance.toStringAsFixed(2)}'),
],
),
Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text('Auto Foco: '),
Switch(
value: _autoFocusEnabled,
onChanged: _isCameraReady ? _setAutoFocus : null,
),
],
),
Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text('Zoom: '),
Slider(
value: _zoomFactor,
min: 1.0,
max: 10.0,
divisions: 100,
onChanged: _isCameraReady ? _setZoom : null,
),
Text('${_zoomFactor.toStringAsFixed(1)}x'),
],
),
ElevatedButton(
onPressed: _isCameraReady ? _takePicture : null,
child: Text('Tirar Foto'),
),
if (_photoPath.isNotEmpty)
Padding(
padding: const EdgeInsets.all(8.0),
child: Text('Foto salva em: $_photoPath'),
),
],
),
),
);
}
}