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
'PROJECT' 카테고리의 다른 글
커피 앱 만들기(1) - 메뉴 및 선택 총 금액 표시하기 (2) | 2024.11.20 |
---|---|
[Flutter] 내기에서 지지 않는 APP - 내기 기능 만들기 (2) (0) | 2024.11.18 |
[Flutter] 내기에서 지지 않는 APP - 메인화면 및 설정 창 만들기(1) (1) | 2024.11.15 |