| // 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 'package:flutter/foundation.dart'; |
| |
| /// A class representing rich content (such as a PNG image) inserted via the |
| /// system input method. |
| /// |
| /// The following data is represented in this class: |
| /// - MIME Type |
| /// - Bytes |
| /// - URI |
| @immutable |
| class KeyboardInsertedContent { |
| /// Creates an object to represent content that is inserted from the virtual |
| /// keyboard. |
| /// |
| /// The mime type and URI will always be provided, but the bytedata may be null. |
| const KeyboardInsertedContent({required this.mimeType, required this.uri, this.data}); |
| |
| /// Converts JSON received from the Flutter Engine into the Dart class. |
| KeyboardInsertedContent.fromJson(Map<String, dynamic> metadata): |
| mimeType = metadata['mimeType'] as String, |
| uri = metadata['uri'] as String, |
| data = metadata['data'] != null |
| ? Uint8List.fromList(List<int>.from(metadata['data'] as Iterable<dynamic>)) |
| : null; |
| |
| /// The mime type of the inserted content. |
| final String mimeType; |
| |
| /// The URI (location) of the inserted content, usually a "content://" URI. |
| final String uri; |
| |
| /// The bytedata of the inserted content. |
| final Uint8List? data; |
| |
| /// Convenience getter to check if bytedata is available for the inserted content. |
| bool get hasData => data?.isNotEmpty ?? false; |
| |
| @override |
| String toString() => '${objectRuntimeType(this, 'KeyboardInsertedContent')}($mimeType, $uri, $data)'; |
| |
| @override |
| bool operator ==(Object other) { |
| if (other.runtimeType != runtimeType) { |
| return false; |
| } |
| return other is KeyboardInsertedContent |
| && other.mimeType == mimeType |
| && other.uri == uri |
| && other.data == data; |
| } |
| |
| @override |
| int get hashCode => Object.hash(mimeType, uri, data); |
| } |