Flutter:如何使用 url 中的图片通过社交网络分享图片
Flutter: how to share image via social network using image from an url
在我的 flutter 应用程序中,我使用 CachedNetworkImage
显示来自互联网的图像。
CachedNetworkImage(
imageUrl: "http://via.placeholder.com/350x150",
placeholder: (context, url) => CircularProgressIndicator(),
errorWidget: (context, url, error) => Icon(Icons.error),
),
我现在希望能够与另一个应用程序共享该缓存图像,例如 instagram。我如何识别缓存的图像并将其作为我的共享函数的参数传递。请参阅下面我的代码,您可以在其中看到我使用 WcFlutterShare
的共享函数,该函数以 ByteData
作为源。我想用 cachedImage
替换 assets/images/logo.png
FlatButton(
onPressed: () {
final ByteData bytes = await rootBundle.load('assets/images/logo.png');
await WcFlutterShare.share(
sharePopupTitle: 'share',
fileName: 'share.png',
mimeType: 'image/png',
bytesOfFile: bytes.buffer.asUint8List());
},
child: Text(
"Share ",
),
)
请注意,我目前的解决方案如下,但我正在下载图像 2 次...
http.Response response = await http.get("http://via.placeholder.com/350x150");
final bytes = response.bodyBytes;
await WcFlutterShare.share(
sharePopupTitle: 'share',
fileName: 'share.jpeg',
mimeType: 'image/jpeg',
bytesOfFile: bytes);
您可以将自己的 cacheManager
传递给 CachedNetworkImage,这样您就可以使用 getFile
(docs) 检索缓存文件。然后就可以获取字节流了。
final BaseCacheManager baseCacheManager = DefaultCacheManager();
...
@override
Widget build(BuildContext context) {
baseCacheManager
.getFile("http://via.placeholder.com/350x150")
.listen((info) {
log(info.file.path);
log(info.originalUrl);
});
return CachedNetworkImage(
cacheManager: baseCacheManager,
imageUrl: "http://via.placeholder.com/350x150",
placeholder: (context, url) => CircularProgressIndicator(),
errorWidget: (context, url, error) => Icon(Icons.error),
);
}
这是我为了测试我的想法而制作的按钮:
FlatButton(
child: Text("Share"),
onPressed: () {
baseCacheManager
.getFile("http://via.placeholder.com/350x150")
.first
.then((info) {
info.file.readAsBytes().then((bytes) {
WcFlutterShare.share(
sharePopupTitle: 'share',
fileName: 'share.jpeg',
mimeType: 'image/jpeg',
bytesOfFile: bytes);
});
});
}),
在我的 flutter 应用程序中,我使用 CachedNetworkImage
显示来自互联网的图像。
CachedNetworkImage(
imageUrl: "http://via.placeholder.com/350x150",
placeholder: (context, url) => CircularProgressIndicator(),
errorWidget: (context, url, error) => Icon(Icons.error),
),
我现在希望能够与另一个应用程序共享该缓存图像,例如 instagram。我如何识别缓存的图像并将其作为我的共享函数的参数传递。请参阅下面我的代码,您可以在其中看到我使用 WcFlutterShare
的共享函数,该函数以 ByteData
作为源。我想用 cachedImage
FlatButton(
onPressed: () {
final ByteData bytes = await rootBundle.load('assets/images/logo.png');
await WcFlutterShare.share(
sharePopupTitle: 'share',
fileName: 'share.png',
mimeType: 'image/png',
bytesOfFile: bytes.buffer.asUint8List());
},
child: Text(
"Share ",
),
)
请注意,我目前的解决方案如下,但我正在下载图像 2 次...
http.Response response = await http.get("http://via.placeholder.com/350x150");
final bytes = response.bodyBytes;
await WcFlutterShare.share(
sharePopupTitle: 'share',
fileName: 'share.jpeg',
mimeType: 'image/jpeg',
bytesOfFile: bytes);
您可以将自己的 cacheManager
传递给 CachedNetworkImage,这样您就可以使用 getFile
(docs) 检索缓存文件。然后就可以获取字节流了。
final BaseCacheManager baseCacheManager = DefaultCacheManager();
...
@override
Widget build(BuildContext context) {
baseCacheManager
.getFile("http://via.placeholder.com/350x150")
.listen((info) {
log(info.file.path);
log(info.originalUrl);
});
return CachedNetworkImage(
cacheManager: baseCacheManager,
imageUrl: "http://via.placeholder.com/350x150",
placeholder: (context, url) => CircularProgressIndicator(),
errorWidget: (context, url, error) => Icon(Icons.error),
);
}
这是我为了测试我的想法而制作的按钮:
FlatButton(
child: Text("Share"),
onPressed: () {
baseCacheManager
.getFile("http://via.placeholder.com/350x150")
.first
.then((info) {
info.file.readAsBytes().then((bytes) {
WcFlutterShare.share(
sharePopupTitle: 'share',
fileName: 'share.jpeg',
mimeType: 'image/jpeg',
bytesOfFile: bytes);
});
});
}),