在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
答案 0 :(得分:0)
您似乎有多种方法。您要传递单个字符串作为参数还是映射?不幸的是,您没有显示Dart结束。
以下是一些工作示例,这些示例是根据有效的插件改编的。
单个字符串
飞镖结束
static void ping(String pong) {
_channel.invokeMethod('ping', pong);
}
快速结束-call.arguments
是String
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.arguments
是Dictionary
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