morse_gesture_detector
화면의 특정 영역을 짧게 누르거나 길게 눌러서 숨겨진 동작을 실행할 때 쓰는 Flutter 위젯입니다.
짧게 누르면 ., 길게 누르면 -로 기록합니다. 정해 둔 순서가 완성되면
콜백을 한 번 실행합니다. 관리자 메뉴, QA용 진입점, 심사용 로그인처럼 화면에
버튼을 따로 노출하고 싶지 않은 경우에 가볍게 붙일 수 있습니다.
설치
pubspec.yaml에 패키지를 추가합니다.
dependencies:
morse_gesture_detector: ^0.0.1
사용법
기존 위젯을 MorseGestureDetector로 감싸면 됩니다.
import 'package:flutter/material.dart';
import 'package:morse_gesture_detector/morse_gesture_detector.dart';
MorseGestureDetector(
pattern: '..-.-',
onMatched: () async {
await openReviewLogin();
},
child: const AppLogo(),
)
pattern에는 .과 -만 사용할 수 있습니다. 읽기 편하게 넣은 공백은
자동으로 빠집니다.
MorseGestureDetector(
pattern: '... --- ...',
onMatched: showEmergencyMenu,
child: const SizedBox(
width: 120,
height: 120,
child: FlutterLogo(),
),
)
기본값은 500ms 미만을 점으로, 500ms 이상을 선으로 판단합니다. 마지막 입력 후 3초가 지나면 입력 중이던 순서를 지웁니다.
MorseGestureDetector(
pattern: '.--.',
dashThreshold: const Duration(milliseconds: 650),
sequenceTimeout: const Duration(seconds: 5),
onInputChanged: (value) {
debugPrint('현재 입력: $value');
},
onSequenceReset: (reason) {
debugPrint('초기화 이유: $reason');
},
onMatched: openAdminPage,
child: const SettingsHeader(),
)
감싼 child가 원래 탭이나 스크롤을 처리하고 있어도 그 동작을 막지 않습니다.
필요할 때는 enabled: false로 감지만 잠시 끌 수 있습니다.
전체 실행 예시는 example/lib/main.dart에 있습니다.
Libraries
- morse_gesture_detector
- Detects Morse-style tap patterns on any Flutter widget.