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.