【问题标题】:Custom Flutter Notification Plugin自定义 Flutter 通知插件
【发布时间】:2018-04-21 00:26:53
【问题描述】:

我目前正在开发一个通知插件,用于我正在转换为 Flutter 的音乐应用程序。到目前为止,一切都运行良好,但是我遇到了一个我不知道如何处理的问题。

我的插件需要一个显示在通知中的图像,这些图像都是通过 url (https://example.com/img.png) 托管和获取的,因此消除了通过文件系统加载

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

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

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

在此先感谢各位,不胜感激。

【问题讨论】:

  • 这个答案有帮助吗?如果是这样,“接受”答案是传统的做法——这让我们俩的声誉都有所提高:-)

标签: dart flutter


【解决方案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(代替字符串数据),您将分别在 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

【讨论】:

  • 我同意这个方案,单独获取数据,然后使用插件从原生发送回调到dart
猜你喜欢
  • 2020-08-26
  • 1970-01-01
  • 2022-12-21
  • 2021-10-16
  • 2022-12-09
  • 1970-01-01
  • 1970-01-01
  • 2019-10-16
  • 2020-07-17
相关资源
最近更新 更多