Flutter频道方法字符串不能用作URL

时间:2019-06-01 11:54:40

标签: swift image url flutter dart

在Flutter项目中,我有一个Channel方法,该方法采用一个字符串(url),下载图像并将其显示为新联系人的一部分。

但是,大多数网址不会显示该图片。

这是我用来获取图片并将其添加到新联系人之前在CNContactViewController中显示的代码。

let urlString : String = (arguments["imgUrl"] as? String)!
            let url = URL(string: urlString)
            let data = try? Data(contentsOf: url!)
            newContact.imageData = data

我尝试对url进行编码并将其强制转换为NSString,但是没有运气。

有趣的是,如果我像下面这样对URL进行硬编码,它就可以工作。那么,从我的Dart源代码将其发送到Swift之间会发生什么?

(URL修改为隐藏内容,真实URL返回图像)

let url = URL(string: "https://23ee7ca4ch9430946b76-4f3bba1a032272305d39a357e474f3b2.ssl.cf1.rackcdn.com/talent/81843293_1556369106.jpeg")
            let data = try? Data(contentsOf: url!)
            newContact.imageData = data

1 个答案:

答案 0 :(得分:0)

您似乎有多种方法。您要传递单个字符串作为参数还是映射?不幸的是,您没有显示Dart结束。

以下是一些工作示例,这些示例是根据有效的插件改编的。

单个字符串

飞镖结束

  static void ping(String pong) {
    _channel.invokeMethod('ping', pong);
  }

快速结束-call.argumentsString

case "ping":
  NSLog("ping")
  if let pong = call.arguments as! String  {
    // do something
  } else {
    NSLog("ping - Invalid Args")
  }
  break

作为地图成员的字符串

飞镖结束

  static void foo(String bar, String baz) {
    _channel.invokeMethod('foo', <String, dynamic>{
      'bar': bar,
      'baz': baz,
    });
  }

快速结束-call.argumentsDictionary

case "foo":
  NSLog("foo")
  if let args = call.arguments as? Dictionary<String, Any>, let bar = args["bar"] as! String {
    // do something with bar and/or args["baz"] as! String
  } else {
    NSLog("foo - Args is not a Dictionary")
  }
  break