플러터로 만든 앱에서 마우스 클릭/터치 모션을 주는 것은 일도 아니다. 그럼, 윈도우즈10에서 실행되는 앱도 가능할까? lottie 애니메이션을 쓸 수 있다면, 지루하기만한 클릭 모션을 마치 맥OS의 프로그램처럼 바꿔줄 수 있으리라..
기나긴 윈도우즈의 역사가 있지만, 비스타 이후에 딱히 클릭 모션에 대한 프로그램이나, 오픈소스들을 많이 만나본 적이 없다. 일단 쓸데 없는 기능이라는 것에는 동의하지만, 윈도우 자체에서 제공하는 기능은 구려도 너무 구리다.

그래도 생각난 김에 해보긴 해야한다.

두 개의 시나리오
#1>> 윈도우즈에서 클릭할때의 좌표를 플러터로 보낸다.
플러터 앱을 invisible한 레이어 상태로 띄워두로 클릭 좌표가 왔을때, 애니메이션을 재생한다.
#2>> 플러터에서 클릭한 좌표를 윈도우즈로 보낸다.
플러터에서 애니메이션을 재생하고, 윈도우에 보내진 좌표는 클릭이 진행된다.
별것도 아닌 두개의 시나리오이지만, chatGPT는 #2를 추천해주길래 했다가.. 몇일간의 개삽질을 하게 된다. #1이 확실한 방법임을 알게 된다.
win32 그리고 ffi
플러터 안드로이드에서 뭐만 하려고 하면 네이티브를 건드려야한다고 할때 무너지는 경우가 많은데, 아..... 윈도우즈는 C++을 건드려야 한다.
방법은 다트코드에서 작성을 하는 것과 그냥 visual studio에서 cpp 파일로 dll 파일을 빌드, 플러터 코드에서 호출을 하는 방법이 있다.
될지 안될지 전혀 모르는 상태에서.. 재미로 하니까 버텼지.. 아니었음 당장 때려 쳤을 것이다.
시나리오 구체화
1) 플러터는 dll 파일을 실행한다.
2) 윈도우즈는 dll 파일로 클릭이 발생할 때, txt 파일에다가 좌표를 찍어서 저장한다.
3) txt파일에 저장된 좌표를 읽어다가, 애니메이션을 재생할 위치 값으로 사용한다.
4) 플러터 앱은 투명 배경을 가지며, 풀스크린으로 백그라운드에서 실행되도록 한다.

사용한 패키지
dll 파일을 컨트롤 하기 위한 io와 ffi은 그냥 import하고, 창을 컨트롤하기 위한 window_manager, 애니메이션 재생을 위한 lottie 패키지를 사용한다.
dll 파일 호출
main에서 dll 파일을 실행 해야 한다. 방법을 전혀 모르게 때문에 이유는 모르겠지만, chatGPT가 알려주는데로 아래와 같이 정의를 해둬야 한다.
startHookThread 함수를 실행해준다. 기능은 단 한가지. c:\temp 폴더 안에 클릭 좌표를 저장하는 것이다. 플러터에서는 txt에 저장된 좌표만을 받아올 것이다.
lottie 애니메이션
rive는 어마무시한 기능들을 제공하는데, lottie는 그냥 실행하는 것이 전부이다. 그래서 더 좋다. aftereffec와 bodymoving으로 연동이 가능하기 때문에, 애니메이션을 만드는 저작툴을 rive처럼 쌩으로 할 필요도 없다.
stack의 positioned 위젯으로 원하는 위치에서 클릭 모션을 재생해주면 이 지루한 싸움은 끝이다.
전체 소스코드는 아래 경로에서 확인할 수 있다.
related posting list
result
클릭 모션은 심플한 1회성 애니메이션이면 충분하므로 rive 애니메이션까지 필요는 없고, lottiefiles 사이트에서 공을 들이지 않고도 쉽게 다운받을 수 있기 때문에, 유용하다.
아래 gif 파일은 lottie 애니메이션을 적용한 결과물이다. 생각보다 퀄리티가 나쁘지 않다. gif의 한계상 좀 끊겨보이긴 하지만,..

별도의 버튼을 두어 애니메이션을 변경할 수 있도록 할까??
우클릭을 별도의 애니메이션으로 처리할까?
아니. 여기까지가 내 생각이었으니, 깔끔하게...
끝.