Skip to content

Instantly share code, notes, and snippets.

@CaiJingLong
Created October 12, 2019 08:13
Show Gist options
  • Select an option

  • Save CaiJingLong/40cab906a9f318432eae965b1c870edc to your computer and use it in GitHub Desktop.

Select an option

Save CaiJingLong/40cab906a9f318432eae965b1c870edc to your computer and use it in GitHub Desktop.
从extended_image 的 editorKey中快速拿图片数据.
static Future<Uint8List> getImageFromEditorKey(
GlobalKey<ExtendedImageEditorState> editorKey) async {
Uint8List result;
final provider =
editorKey.currentState.widget.extendedImageState.imageProvider;
if (provider is AssetImage) {
ByteData byteData;
if (provider.package == null) {
byteData = await rootBundle.load(provider.assetName);
} else {
byteData = await rootBundle
.load("packages/${provider.package}/${provider.assetName}");
}
result = byteData.buffer.asUint8List();
} else if (provider is FileImage) {
result = provider.file.readAsBytesSync();
} else if (provider is MemoryImage) {
result = provider.bytes;
} else if (provider is NetworkImage) {
final client = HttpClient();
final req = await client.getUrl(Uri.parse(provider.url));
for (final key in provider.headers.keys) {
final value = provider.headers[key];
req.headers.add(key, value);
}
final response = await req.close();
final listList = await response.toList();
List<int> tmp = [];
for (final list in listList) {
tmp.addAll(list);
}
result = Uint8List.fromList(tmp);
client.close();
} else if (provider is ExtendedNetworkImageProvider) {
final file = await getCachedImageFile(provider.url);
if (file != null) {
result = file.readAsBytesSync();
} else {
final client = HttpClient();
final req = await client.getUrl(Uri.parse(provider.url));
for (final key in provider.headers.keys) {
final value = provider.headers[key];
req.headers.add(key, value);
}
final response = await req.close();
final listList = await response.toList();
List<int> tmp = [];
for (final list in listList) {
tmp.addAll(list);
}
result = Uint8List.fromList(tmp);
client.close();
}
} else {
result = (await editorKey.currentState.image.toByteData())
.buffer
.asUint8List();
}
return result;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment