2014-06-19 31 views
0

你如何获得鼠标移动,但只有当你点击。鼠标移动,而鼠标没有在Dart工作?

我知道这是你如何跟踪鼠标是否被点击:

canvas.onMouseDown

,这是你如何跟踪鼠标移动canvas.onMouseMove

所以我试着这样做:

//when the mouse is clicked 
canvas.onMouseDown.listen((onData){ 
print("Mouse is down!" + "(" + onData.client.x.toString() + ", " + onData.client.y.toString() + ")"); 

//check where it's being dragged 
canvas.onMouseMove.listen((onData){ 
    mouseMovementsDown(onData.client.x, onData.client.y); 
}); 

}); 

但问题是它不停止,一旦我停止点击。只要鼠标关闭,我想跟踪移动,一旦鼠标不再下移,我想停止跟踪鼠标的移动。谁能帮我?出于某种原因,这件事情继续报告canvas.onMouseMove,即使我把鼠标放在上面。

我也试过这样:

if(canvas.onMouseDown.listen(onData) == true) 

但很显然,这不是事情镖如何工作>>。

我在dart api docs上了解了更多关于流的信息,有人可以向我解释接近的用法吗?我认为它说这就是你如何停止从鼠标事件获取输入,但是如何做到这一点,我不真正了解canvas.onMouseUp发生时如何编写代码来停止canvas.onMouseMove.listen流。

回答

1

您可以参考存储鼠标移动StreamSubscription并取消其在mouseUp事件:

canvas.onMouseDown.listen((onData) { 

    StreamSubscription mouseMoveStream = canvas.onMouseMove.listen((onData) { 
    // Do things... 
    }); 

    canvas.onMouseUp.listen((onData) => mouseMoveStream.cancel()); 

}); 
+0

谢谢!这工作完美! :d – user3505901