Методы Flutter Channels Цель C отправить и использовать UInt8List - PullRequest
0 голосов
/ 17 декабря 2018

Я попытался написать свой собственный плагин флаттера, отправив UInt8List на нативный Android и IOS.Все нормально работает на части Android, но часть IOS не работает.Я пытаюсь сохранить массив байтов в качестве изображения.Я знаю, что есть библиотеки для чего-то подобного, но это не то, что я хочу:)

Внутри моего файла канала Methode, я вызываю следующую функцию:

   static Future<void> saveImage({
    @required String filename,
    @required Uint8List bytes
  }) async {
    assert(bytes != null && filename != null);

    final bool success = await _channel.invokeMethod(
      'saveImage',
      <String, dynamic>{
        'filename': filename,
        'bytes': bytes,
      },
    );

    return success;
  }

В моем коде IOS я пытаюсьпрочитать байтовый массив и превратить его в изображение.

- (void)handleMethodCall:(FlutterMethodCall*)call result:(FlutterResult)result {
    if ([@"saveImage" isEqualToString:call.method]) {
        NSDictionary *_arguments = call.arguments;
        NSData *data = [_arguments objectForKey:@"bytes"];
        NSData *imageData = [NSData dataWithBytesNoCopy: (__bridge void * _Nonnull)(data) length:sizeof(data) freeWhenDone:YES];
        UIImage *image = [UIImage imageWithData:imageData];
        UIImageWriteToSavedPhotosAlbum(image, nil, nil, nil);
        result(FlutterMethodNotImplemented); // For Test purposes

    } else {
        result(FlutterMethodNotImplemented);
    }
}

Но это создает поток 1: EXC_BAD_ACCESS (код = 1, адрес = 0x20) во время закрывающей скобки.Я не получаю никакой другой ошибки.Некоторые PO-команды показывали следующую информацию:

(lldb) po _arguments
{
    bytes = "<FlutterStandardTypedData: 0x114dfb110>";
    filename = "1545043056295.jpeg";
}

(lldb) po data
<FlutterStandardTypedData: 0x114dfb110>

(lldb) po imageData
<1972c703 a1410000>

(lldb) po image
 nil

Мне кажется, что я не могу создать объект изображения NSData из Bytearray, но я не уверен, почему.Может ли кто-нибудь помочь мне здесь?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...