Я попытался написать свой собственный плагин флаттера, отправив 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, но я не уверен, почему.Может ли кто-нибудь помочь мне здесь?