FPI 사용자·국가 랭킹 서버 집계 · YouTube 스밍 · Music Shake 참여
This commit is contained in:
@@ -1,6 +1,8 @@
|
||||
import 'dart:async';
|
||||
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter/services.dart';
|
||||
import 'package:url_launcher/url_launcher.dart';
|
||||
|
||||
import '../../core/ui/app_dialog.dart';
|
||||
|
||||
@@ -86,8 +88,7 @@ class _QuestDetailScreenState extends State<QuestDetailScreen> {
|
||||
});
|
||||
// 목록에서 「시작하기」를 눌러 진행중으로 들어온 경우다. 여기서 다시 켜지 않으면
|
||||
// 상세를 열어도 실행률이 0 에 멈춘 채로 남는다.
|
||||
if (_stage == QuestStage.inProgress &&
|
||||
detail.card.type == QuestType.steps) {
|
||||
if (_stage == QuestStage.inProgress && detail.card.type.gathers) {
|
||||
_watch(detail.card);
|
||||
}
|
||||
}
|
||||
@@ -593,7 +594,7 @@ class _QuestDetailScreenState extends State<QuestDetailScreen> {
|
||||
case QuestStage.notStarted:
|
||||
// **모을 진행도가 있는 유형만 「진행중」을 지난다.** 걸음은 목표까지
|
||||
// 쌓아야 하지만 출석·방문은 그 자리에서 판정이 끝나므로 참여가 곧 완료다.
|
||||
if (detail.card.goal > 1 && detail.card.type == QuestType.steps) {
|
||||
if (detail.card.goal > 1 && detail.card.type.gathers) {
|
||||
await _start(detail);
|
||||
} else {
|
||||
await _claim(detail);
|
||||
@@ -634,6 +635,8 @@ class _QuestDetailScreenState extends State<QuestDetailScreen> {
|
||||
.listen(
|
||||
(value) {
|
||||
if (!mounted) return;
|
||||
// Music Shake — 박마다 짧은 진동으로 흔들 때를 알린다.
|
||||
if (card.type == QuestType.musicShake) HapticFeedback.selectionClick();
|
||||
setState(() {
|
||||
_live = value;
|
||||
if (card.goal > 0 && value >= card.goal) {
|
||||
@@ -712,6 +715,16 @@ class _QuestDetailScreenState extends State<QuestDetailScreen> {
|
||||
_busy = false;
|
||||
_stage = QuestStage.rewarded;
|
||||
});
|
||||
// 시청 · 스트리밍은 무보상 참여다(C-04) — 보상 · 광고 화면 없이 참여만 알리고 링크를 연다.
|
||||
if (detail.card.type == QuestType.streaming) {
|
||||
_toast(context.l10n.questStreamJoined);
|
||||
final url = Uri.tryParse(detail.link?.url ?? '');
|
||||
if (url != null && url.hasScheme) {
|
||||
await launchUrl(url, mode: LaunchMode.externalApplication);
|
||||
}
|
||||
await _load();
|
||||
return;
|
||||
}
|
||||
// 이미 받은 보상의 재응답 — 보상 화면을 두 번 띄우지 않고 알리기만 한다.
|
||||
if (reward.duplicate) {
|
||||
_toast(context.l10n.questAlreadyRewarded(formatPop(reward.rewardedPop)));
|
||||
|
||||
Reference in New Issue
Block a user