| // Copyright 2014 The Flutter Authors. All rights reserved. | |
| // Use of this source code is governed by a BSD-style license that can be | |
| // found in the LICENSE file. | |
| import 'dart:convert'; | |
| import 'dart:typed_data'; | |
| import 'message.dart'; | |
| /// Format of data returned by screenshot driver command. | |
| enum ScreenshotFormat { | |
| /// Raw RGBA format. | |
| /// | |
| /// Unencoded bytes, in RGBA row-primary form with premultiplied alpha, 8 bits per channel. | |
| rawRgba, | |
| /// Raw straight RGBA format. | |
| /// | |
| /// Unencoded bytes, in RGBA row-primary form with straight alpha, 8 bits per channel. | |
| rawStraightRgba, | |
| /// Raw unmodified format. | |
| rawUnmodified, | |
| /// Raw extended range RGBA format. | |
| /// | |
| /// Unencoded bytes, in RGBA row-primary form with straight alpha, 32 bit | |
| /// float (IEEE 754 binary32) per channel. | |
| rawExtendedRgba128, | |
| /// PNG format. | |
| png, | |
| } | |
| /// A Flutter Driver command that takes a screenshot. | |
| class ScreenshotCommand extends Command { | |
| /// Constructs this command to take a screenshot. | |
| ScreenshotCommand({super.timeout, this.format = ScreenshotFormat.png}); | |
| /// Deserializes this command from the value generated by [serialize]. | |
| ScreenshotCommand.deserialize(super.json) | |
| : format = json.containsKey('format') | |
| ? ScreenshotFormat.values[int.tryParse(json['format']!) ?? 4] | |
| : ScreenshotFormat.png, | |
| super.deserialize(); | |
| /// Whether the resulting data is PNG compressed. | |
| final ScreenshotFormat format; | |
| /// Serializes this command to parameter name/value pairs. | |
| @override | |
| Map<String, String> serialize() { | |
| return super.serialize()..addAll(<String, String>{'format': format.index.toString()}); | |
| } | |
| @override | |
| String get kind => 'screenshot'; | |
| } | |
| /// base64 encode a PNG | |
| class ScreenshotResult extends Result { | |
| /// Constructs a screenshot result with PNG or raw RGBA byte data. | |
| ScreenshotResult(this._data); | |
| final Uint8List _data; | |
| @override | |
| Map<String, Object?> toJson() { | |
| return <String, Object?>{'data': base64.encode(_data)}; | |
| } | |
| } |