| # Camera Plugin |
| |
| [](https://pub.dartlang.org/packages/camera) |
| |
| A Flutter plugin for iOS and Android allowing access to the device cameras. |
| |
| *Note*: This plugin is still under development, and some APIs might not be available yet. We are working on a refactor which can be followed here: [issue](https://github.com/flutter/flutter/issues/31225) |
| |
| ## Features: |
| |
| * Display live camera preview in a widget. |
| * Snapshots can be captured and saved to a file. |
| * Record video. |
| * Add access to the image stream from Dart. |
| |
| ## Installation |
| |
| First, add `camera` as a [dependency in your pubspec.yaml file](https://flutter.io/using-packages/). |
| |
| ### iOS |
| |
| Add two rows to the `ios/Runner/Info.plist`: |
| |
| * one with the key `Privacy - Camera Usage Description` and a usage description. |
| * and one with the key `Privacy - Microphone Usage Description` and a usage description. |
| |
| Or in text format add the key: |
| |
| ```xml |
| <key>NSCameraUsageDescription</key> |
| <string>Can I use the camera please?</string> |
| <key>NSMicrophoneUsageDescription</key> |
| <string>Can I use the mic please?</string> |
| ``` |
| |
| ### Android |
| |
| Change the minimum Android sdk version to 21 (or higher) in your `android/app/build.gradle` file. |
| |
| ``` |
| minSdkVersion 21 |
| ``` |
| |
| ### Example |
| |
| Here is a small example flutter app displaying a full screen camera preview. |
| |
| ```dart |
| import 'dart:async'; |
| import 'package:flutter/material.dart'; |
| import 'package:camera/camera.dart'; |
| |
| List<CameraDescription> cameras; |
| |
| Future<void> main() async { |
| cameras = await availableCameras(); |
| runApp(CameraApp()); |
| } |
| |
| class CameraApp extends StatefulWidget { |
| @override |
| _CameraAppState createState() => _CameraAppState(); |
| } |
| |
| class _CameraAppState extends State<CameraApp> { |
| CameraController controller; |
| |
| @override |
| void initState() { |
| super.initState(); |
| controller = CameraController(cameras[0], ResolutionPreset.medium); |
| controller.initialize().then((_) { |
| if (!mounted) { |
| return; |
| } |
| setState(() {}); |
| }); |
| } |
| |
| @override |
| void dispose() { |
| controller?.dispose(); |
| super.dispose(); |
| } |
| |
| @override |
| Widget build(BuildContext context) { |
| if (!controller.value.isInitialized) { |
| return Container(); |
| } |
| return AspectRatio( |
| aspectRatio: |
| controller.value.aspectRatio, |
| child: CameraPreview(controller)); |
| } |
| } |
| ``` |
| |
| For a more elaborate usage example see [here](https://github.com/flutter/plugins/tree/master/packages/camera/example). |
| |
| *Note*: This plugin is still under development, and some APIs might not be available yet. |
| [Feedback welcome](https://github.com/flutter/flutter/issues) and |
| [Pull Requests](https://github.com/flutter/plugins/pulls) are most welcome! |