pickImageAsBytes static method

Future<Uint8List> pickImageAsBytes()

Implementation

static Future<Uint8List> pickImageAsBytes() async {
  try {
    final html.InputElement input = html.InputElement();
    input.type = 'file';
    input.accept = 'image/*';

    input.click();

    final html.File? file = await _waitForFileSelection(input);
    if (file == null) throw Exception('No file selected');

    final html.FileReader reader = html.FileReader();
    final Completer<Uint8List> completer = Completer<Uint8List>();

    reader.onLoadEnd.listen((html.Event e) {
      final result = reader.result;
      if (result is Uint8List) {
        final List<int> bytes = result.toList();
        completer.complete(Uint8List.fromList(bytes));
      } else {
        completer.completeError('Unexpected file reader result type');
      }
    });

    reader.onError.listen((html.Event e) {
      completer.completeError('Failed to read file: ${reader.error}');
    });

    reader.readAsArrayBuffer(file);

    return completer.future;
  } catch (e) {
    throw Exception('Error picking image: $e');
  }
}