以下
main.html中
<!DOCTYPE html>
<html>
<head>
<title>test</title>
</head>
<body>
<p id="test" draggable="true">hello world</p>
<script type="application/dart" src="main.dart"></script>
<!-- for this next line to work, your pubspec.yaml file must have a dependency on 'browser' -->
<script src="packages/browser/dart.js"></script>
</body>
</html>
和 main.dart
import 'dart:html';
void main() {
var elem = query('#test');
elem.onDragStart.listen((evt) {
evt.clipboardData.setData('text/html', elem.innerHtml);
});
}
正在产生异常
The null object does not have a method 'setData'.
NoSuchMethodError : method not found: 'setData'
Receiver: null
Arguments: ["text/html", "hello world"]
我已经搜索过了,但是找不到关于我可能做错的相关信息,或者根本没有找到关于clipboardData的相关信息(即使API在问题上是沉默的,而源dart:html文件只是指向“本地代码”
答案 0 :(得分:3)
(从我对原始问题的评论)
请改用:
evt.dataTransfer.setData('text/html', elem.innerHtml);
这是attribute on MouseEvent
(api ref)而不是基础Event
类,您可以通过明确声明evt
类型为MouseEvent
来获取自动填充并删除编辑器警告:< / p>
elem.onDragStart.listen((MouseEvent evt) {
evt.dataTransfer.setData('text/html', elem.innerHtml);
});
答案 1 :(得分:0)
clipboardData
似乎已被弃用而未发出警告。在web_ui组件中(我第一次观察到这一点),编辑器无法将dataTransfer属性识别为Event
实例的有效属性。我在网上找不到任何有关为何进行此更改的参考资料(API文档没有就此事发表任何意见,我在论坛上找不到最近的帖子)......