自定义颤振通知插件

时间:2018-04-20 13:16:03

标签: dart flutter

我目前正在开发一个通知插件,用于我的音乐应用程序,我将转换为Flutter。到目前为止,它一直都很完美,但是我遇到了一个我不确定如何处理的问题。

我的插件需要一个显示在通知中的图像,图像全部通过网址(https://example.com/img.png)托管和获取,以便通过文件系统取消加载

现在的问题是,我希望尽可能保持插件的轻量级(宁愿不添加Glide等)。

无论如何我可以将位图直接从flutter传递给插件吗?也许和我们传递字符串的方式相同?

static Future example(String data) async {
  await _channel.invokeMethod('example', {
    'data' : data
  });
}

先谢谢你们,感谢任何建议。

1 个答案:

答案 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.HashMapNSDictionary