Skip to content
This repository was archived by the owner on Sep 4, 2024. It is now read-only.

Image support on Web example #8

Description

@zambetpentru

Hi,

I just had to figure out the code to paste a PNG image to the clipboard in Flutter Web, so I thought to share it here for future reference:

import 'dart:html';

import 'package:js/js.dart';
import 'package:js/js_util.dart';
import 'package:flutter_web_plugins/flutter_web_plugins.dart';

    final image = await QrPainter(
      data: "https://www.google.com",
      version: QrVersions.auto,
      errorCorrectionLevel: QrErrorCorrectLevel.Q,
    ).toImageData(400);

    var pngBytes = image!.buffer.asUint8List();

    final clipboard = window.navigator.clipboard as _Clipboard?;
    if (clipboard == null) {
      return;
    }

//DOES not work on Firefox due to limitations in Clipboard API

    final dataMap = <dynamic, dynamic>{
      'image/png': Blob([pngBytes], 'image/png')
    };

    var out = jsify(dataMap);
    final item = _ClipboardItem(out);
    await clipboard.write([item]);




@JS('ClipboardItem')
@staticInterop
class _ClipboardItem {
  external _ClipboardItem(dynamic args);
}

@JS('Clipboard')
@staticInterop
class _Clipboard {}

extension _ClipboardImpl on _Clipboard {
  @JS('read')
  external dynamic _read();
  Future<List<_ClipboardItem>> read() => promiseToFuture<List<dynamic>>(_read()).then((list) => list.cast<_ClipboardItem>());

  @JS('write')
  external dynamic _write(List<_ClipboardItem> items);
  Future<void> write(List<_ClipboardItem> items) => promiseToFuture(_write(items));
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions