Skip to content
This repository was archived by the owner on Feb 22, 2023. It is now read-only.

[camera_web] Make plugin publishable for the first time. #4304

Merged
merged 5 commits into from
Sep 3, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
9 changes: 2 additions & 7 deletions packages/camera/camera_web/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,8 +1,3 @@
## 0.1.0+1
## 0.2.0

* Add `implements` to pubspec.

## 0.1.0

* Initial release
* Added CameraOptions used to constrain the camera audio and video.
* Initial release, adapted from the Flutter [I/O Photobooth](https://photobooth.flutter.dev/) project.
55 changes: 38 additions & 17 deletions packages/camera/camera_web/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,10 @@ The web implementation of [`camera`][camera].

## Usage

This package is [endorsed](https://flutter.dev/docs/development/packages-and-plugins/developing-packages#endorsed-federated-plugin), which means you can simply use `camera` normally. This package will be automatically included in your app when you do.
### Depend on the package

This package is not an [endorsed implementation](https://flutter.dev/docs/development/packages-and-plugins/developing-packages#endorsed-federated-plugin)
of the google_maps_flutter plugin yet, so you'll need to [add it explicitly](https://pub.dev/packages/camera_web/install).

## Example

Expand All @@ -16,41 +19,59 @@ Find the example in the [`camera` package](https://pub.dev/packages/camera#examp

### Camera devices

The camera devices are accessed with [Stream Web API](https://developer.mozilla.org/en-US/docs/Web/API/Media_Streams_API) with the following [browser support](https://caniuse.com/stream):
The camera devices are accessed with [Stream Web API](https://developer.mozilla.org/en-US/docs/Web/API/Media_Streams_API)
with the following [browser support](https://caniuse.com/stream):

![Data on support for the Stream feature across the major browsers from caniuse.com](https://caniuse.bitsofco.de/image/stream.png)

Accessing camera devices requires a [secure browsing context](https://developer.mozilla.org/en-US/docs/Web/Security/Secure_Contexts). This means that you might need to serve your web application over HTTPS. For insecure contexts `CameraPlatform.availableCameras` might throw a `CameraException` with the `permissionDenied` error code.
Accessing camera devices requires a [secure browsing context](https://developer.mozilla.org/en-US/docs/Web/Security/Secure_Contexts).
Broadly speaking, this means that you need to serve your web application over HTTPS
(or `localhost` for local development). For insecure contexts
`CameraPlatform.availableCameras` might throw a `CameraException` with the
`permissionDenied` error code.

### Device orientation

The device orientation implementation is backed by [`Screen Orientation Web API`](https://www.w3.org/TR/screen-orientation/) with the following [browser support](https://caniuse.com/screen-orientation):
The device orientation implementation is backed by [`Screen Orientation Web API`](https://www.w3.org/TR/screen-orientation/)
with the following [browser support](https://caniuse.com/screen-orientation):

![Data on support for the Screen Orientation feature across the major browsers from caniuse.com](https://caniuse.bitsofco.de/image/screen-orientation.png)

For the browsers that do not support the device orientation:

- `CameraPlatform.onDeviceOrientationChanged` returns an empty stream.
- `CameraPlatform.lockCaptureOrientation` and `CameraPlatform.unlockCaptureOrientation` throw a `PlatformException` with the `orientationNotSupported` error code.
- `CameraPlatform.lockCaptureOrientation` and `CameraPlatform.unlockCaptureOrientation`
throw a `PlatformException` with the `orientationNotSupported` error code.

### Flash mode and zoom level

The flash mode and zoom level implementation is backed by [Image Capture Web API](https://w3c.github.io/mediacapture-image/) with the following [browser support](https://caniuse.com/mdn-api_imagecapture) (as of 12 August 2021):
The flash mode and zoom level implementation is backed by [Image Capture Web API](https://w3c.github.io/mediacapture-image/)
with the following [browser support](https://caniuse.com/mdn-api_imagecapture):

![Data on support for the Image Capture feature across the major browsers from caniuse.com](https://caniuse.bitsofco.de/static/v1/mdn-api__ImageCapture-1628778966589.png)
![Data on support for the Image Capture feature across the major browsers from caniuse.com](https://caniuse.bitsofco.de/static/v1/mdn-api__ImageCapture-1628778966589.png)

For the browsers that do not support the flash mode:
- `CameraPlatform.setFlashMode` throws a `PlatformException` with the `torchModeNotSupported` error code.

- `CameraPlatform.setFlashMode` throws a `PlatformException` with the
`torchModeNotSupported` error code.

For the browsers that do not support the zoom level:
- `CameraPlatform.getMaxZoomLevel`, `CameraPlatform.getMinZoomLevel` and `CameraPlatform.setZoomLevel` throw a `PlatformException` with the `zoomLevelNotSupported` error code.

- `CameraPlatform.getMaxZoomLevel`, `CameraPlatform.getMinZoomLevel` and
`CameraPlatform.setZoomLevel` throw a `PlatformException` with the
`zoomLevelNotSupported` error code.

### Taking a picture

The image capturing implementation is backed by [`URL.createObjectUrl` Web API](https://developer.mozilla.org/en-US/docs/Web/API/URL/createObjectURL) with the following [browser support](https://caniuse.com/bloburls):
The image capturing implementation is backed by [`URL.createObjectUrl` Web API](https://developer.mozilla.org/en-US/docs/Web/API/URL/createObjectURL)
with the following [browser support](https://caniuse.com/bloburls):

![Data on support for the Blob URLs feature across the major browsers from caniuse.com](https://caniuse.bitsofco.de/image/bloburls.png)

The web platform does not support `dart:io`. Attempts to display a captured image using `Image.file` will throw an error. The capture image contains a network-accessible URL pointing to a location within the browser and should be displayed using `Image.network` or `Image.memory` after loading the image bytes to memory.
The web platform does not support `dart:io`. Attempts to display a captured image
using `Image.file` will throw an error. The capture image contains a network-accessible
URL pointing to a location within the browser (blob) and can be displayed using
`Image.network` or `Image.memory` after loading the image bytes to memory.

See the example below:

Expand All @@ -65,13 +86,13 @@ if (kIsWeb) {
## Missing implementation

The web implementation of [`camera`][camera] is missing the following features:
- Video recording

- Video recording ([in progress](https://github.com/flutter/plugins/pull/4210))
- Exposure mode, point and offset
- Focus mode and point
- Camera closing events
- Camera sensor orientation
- Camera image format group
- Camera image streaming
- Sensor orientation
- Image format group
- Streaming of frames

<!-- Links -->
[camera]: https://pub.dev/packages/camera
[camera]: https://pub.dev/packages/camera
8 changes: 2 additions & 6 deletions packages/camera/camera_web/pubspec.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,7 @@ name: camera_web
description: A Flutter plugin for getting information about and controlling the camera on Web.
repository: https://github.com/flutter/plugins/tree/master/packages/camera/camera_web
issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+camera%22
version: 0.1.0+1

# This plugin is under development and will be published
# when the first working web camera implementation is added.
# TODO(bselwe): Remove when camera_web should be published.
publish_to: none
version: 0.2.0

environment:
sdk: ">=2.12.0 <3.0.0"
Expand All @@ -27,6 +22,7 @@ dependencies:
sdk: flutter
flutter_web_plugins:
sdk: flutter
stream_transform: ^2.0.0

dev_dependencies:
flutter_test:
Expand Down