我目前正在开发一个通知插件,用于我的音乐应用程序,我将转换为Flutter。到目前为止,它一直都很完美,但是我遇到了一个我不确定如何处理的问题。
我的插件需要一个显示在通知中的图像,图像全部通过网址(https://example.com/img.png)托管和获取,以便通过文件系统取消加载
现在的问题是,我希望尽可能保持插件的轻量级(宁愿不添加Glide等)。
无论如何我可以将位图直接从flutter传递给插件吗?也许和我们传递字符串的方式相同?
static Future example(String data) async {
await _channel.invokeMethod('example', {
'data' : data
});
}
先谢谢你们,感谢任何建议。
答案 0 :(得分:1)
在Dart和本机类型之间转换的StandardMessageCodec处理
acyclic values of these forms:
null
[bool]s
[num]s
[String]s
[Uint8List]s, [Int32List]s, [Int64List]s, [Float64List]s
[List]s of supported values
[Map]s from supported values to supported values
因此您可以在示例中传递Uint8List(代替String数据),并且您将分别在Android和iOS的本机端获得byte[]
或FlutterStandardTypedData
。
目前尚不清楚是否需要本机端的png或解码后的位图。
要获取png,您可以使用http包
import 'dart:typed_data';
import 'package:http/http.dart';
Uint8List png =
(await get('http://www.barcodes4.me/barcode/c39/123456.png')).bodyBytes;
并将Uint8List png传递给invokeMethod。如果你需要先转换为位图(尽管你可以避免这种情况,因为位图会比png大得多),请使用图像包。
import 'package:image/image.dart';
Image image = decodeImage(png); // if known to be a PNG, could call decodePng
Map<String, dynamic> imageData = {
'width': image.width,
'height': image.height,
'bitmap': image.getBytes(),
};
并将Map imageData传递给invokeMethod。这将在原始结束时显示为java.util.HashMap
或NSDictionary
。