Vueer
Vueer

Reputation: 1502

Tap to focus for Flutter camera

A simple, but very complicated question: What’s the best way to add a tap to focus functionality for the Flutter camera?

I’ve searched the entire World Wide Web about elegant solutions, but I found nothing.

Do you have an idea?

Upvotes: 9

Views: 1239

Answers (1)

Yuri H
Yuri H

Reputation: 680

I might be late but you can try adv_camera package.

Here is a simple example:

import 'package:adv_camera/adv_camera.dart';
import 'package:flutter/material.dart';

class CameraApp extends StatefulWidget {
  final String id;

  const CameraApp({Key? key, required this.id}) : super(key: key);

  @override
  _CameraAppState createState() => _CameraAppState();
}

class _CameraAppState extends State<CameraApp> {
  List<String> pictureSizes = <String>[];
  String? imagePath;

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('AdvCamera Example'),
      ),
      body: SafeArea(
        child: AdvCamera(
          initialCameraType: CameraType.rear,
          onCameraCreated: _onCameraCreated,
          onImageCaptured: (String path) {
            if (this.mounted)
              setState(() {
                imagePath = path;
              });
          },
          cameraPreviewRatio: CameraPreviewRatio.r16_9,
          focusRectColor: Colors.purple,
          focusRectSize: 200,
        ),
      ),
      floatingActionButton: FloatingActionButton(
        heroTag: "capture",
        child: Icon(Icons.camera),
        onPressed: () {
          cameraController!.captureImage();
        },
      ),
    );
  }

  AdvCameraController? cameraController;

  _onCameraCreated(AdvCameraController controller) {
    this.cameraController = controller;

    this.cameraController!.getPictureSizes().then((pictureSizes) {
      setState(() {
        this.pictureSizes = pictureSizes ?? <String>[];
      });
    });
  }
}

Upvotes: 1

Related Questions