본문 바로가기
PROJECT

[Flutter] 내기에서 지지 않는 APP - 비밀기능 만들기 & 완료 (3)

by Nuridal_class 2024. 11. 19.
728x90
728x90
 

[Flutter] 내기에서 지지 않는 APP - 내기 기능 만들기 (2)

[Flutter] 내기에서 지지 않는 APP - 메인화면 및 설정 창 만들기(1)프로젝트 사이에 시간이 비어서 뭘 해볼까 하는 생각에 내기할때 내가 무조껀 이긴다면??하는 막연한 생각에 만들어볼까? 해서 시

nuridal-class.tistory.com

오늘은 마무리가 될 것 같습니다. 내기하는 기능은 만들었고 이젠 내가 걸리지 않게끔 하는 장치가 있어야 겠죠?
그 기능을 넣고 마무리 해보도록 하겠습니다.

1. 파일 추가

이번에는 수정도 된 파일과 추가된 파일을 표시했습니다.

lib/
├── main.dart # 앱의 진입점
├── screens/
        └── home_screen.dart # 메인 화면 구현 (수정)
├── models/
        └── ripple_effect_model.dart # 리플 효과 데이터 모델 (수정)
├── widgets/
        ├── ripple_effect.dart # 리플 효과 위젯       
        ├── settings_bottom_sheet.dart # 설정 바텀시트 위젯
        └── secret_settings_dialog.dart # 비밀 설정 다이얼로그 위젯 (추가)
├── utils/
        └── game_controller.dart # 게임 로직 컨트롤러 (수정)
└── painters/
        └── circle_painter.dart # 원형 리플 그리기 로직

 

2. 변경 및 추가된 위젯 코드

 2.1 home_screen.dart

🧑‍💻트리플 탭으로 비밀 설정 다이얼로그 호출 기능 추가
🧑‍💻카운트다운 UI 추가
    return GestureDetectorWithTripleTap(
      onTripleTap: () {
        showDialog(
          context: context,
          builder: (BuildContext context) {
            return SecretSettingsDialog(gameController: gameController);
          },
        );
      },

 

 2.2 ripple_effect_model.dart

🧑‍💻isCorner 속성 추가: 모서리에서 생성된 리플인지 여부
class RippleEffect {
  ValueNotifier<Offset> position;
  final AnimationController controller;
  final Animation<double> animation;
  bool isActive;
  bool isAnimating;
  Color color;
  bool isCorner;

 

 2.3 secret_settings_dialog.dart

🧑‍💻GameController와 직접 연동
🧑‍💻ValueNotifier를 통한 반응형 상태 관리
🧑‍💻iOS 스타일의 디자인 시스템 적용
🧑‍💻모서리별 독립적인 설정 가능
🔐게임의 숨겨진 설정을 제어하는 비밀 메뉴로, 사용자가 화면을 세 번 탭했을 때만 접근할 수 있습니다.
class SecretSettingsDialog extends StatefulWidget {
  final GameController gameController;  // 게임 컨트롤러 참조

  // ... 생성자 및 State 생성 코드
}

class _SecretSettingsDialogState extends State<SecretSettingsDialog> {
  // 토글 옵션을 만드는 헬퍼 메서드
  Widget _buildToggleOption(String title, ValueNotifier<bool> valueNotifier) {
    // ... 토글 UI 구현
  }

  @override
  Widget build(BuildContext context) {
    // ... 다이얼로그 UI 구현
  }
}

 

 2.4 game_controller.dart

🧑‍💻코너 설정을 위한 ValueNotifier 추가
🧑‍💻카운트다운 기능 추가 (3초)
🧑‍💻모서리 터치 감지 기능 추가
class GameController {
  final Map<int, RippleEffect> activeRipples = {};
  final double rippleSize = 150.0;
  final int maxRipples = 5;
  Timer? selectionTimer;
  bool isSelectionComplete = false;
  final TickerProvider vsync;
  final Function() onStateChanged;
  ValueNotifier<int?> countdown = ValueNotifier<int?>(null);

  // 코너 설정 상태를 ValueNotifier로 변경
  final ValueNotifier<bool> leftBottomEnabled = ValueNotifier<bool>(false);
  final ValueNotifier<bool> rightBottomEnabled = ValueNotifier<bool>(false);
  final ValueNotifier<bool> rightTopEnabled = ValueNotifier<bool>(false);
  final ValueNotifier<bool> leftTopEnabled = ValueNotifier<bool>(false);

 

2. 시퀀스 다이어그램

어플에 대한 시퀀스 다이어그램은 아래와 같습니다.

 

3. 실행화면

비밀설정 창에서 왼쪽 하단 모서리를 활성화 시키면
터치가 활성화된 부분에서 시작한다면? 내기에 걸리지 않게 되는 것을 볼 수 있습니다.

 

4. 전체코드

개인 GitHub에 있습니다! 악용은 Nope!입니다!!
 

GitHub - Jeoungeunseok/bet_only_win: 가벼운 마음으로 내기하면 무조껀 내가 이기는 어플입니다.

가벼운 마음으로 내기하면 무조껀 내가 이기는 어플입니다. Contribute to Jeoungeunseok/bet_only_win development by creating an account on GitHub.

github.com

 


이렇게 생각으로만 했던 내기에서 난 안걸리는 APP을 만들어봤습니다.

물론 다 장난으로 만드는 것이니 악용은 안됩니다!

그럼! 코딩이 쉬워지는 그날까지!!

728x90
300x250