UX·FX v1.5 — 햅틱 단계 · 라이브 띠 · HERO 전광판 · Push 우선순위 · Shield · 이클립스 성공·실패 연출

This commit is contained in:
Sn-Kinos
2026-10-06 20:12:44 +09:00
parent a04626b003
commit 62b9637db9
30 changed files with 851 additions and 118 deletions
@@ -22,6 +22,7 @@ import 'widgets/campaign_list_card.dart' show CampaignAuthor;
import 'widgets/campaign_rank.dart';
import 'widgets/campaign_share_dialog.dart';
import 'widgets/campaign_style.dart';
import '../../core/ui/fx_intensity.dart';
/// 캠페인 상세 — 화면 대조 원장 F5 · Figma `272:245738`.
///
@@ -998,6 +999,7 @@ class _CampaignDetailScreenState extends State<CampaignDetailScreen> {
return;
}
if (!mounted) return;
final before = _raised;
setState(() {
_spent += applied;
_raised += applied;
@@ -1010,6 +1012,8 @@ class _CampaignDetailScreenState extends State<CampaignDetailScreen> {
_detail = fresh;
_raised = fresh.card.raisedPop;
});
// v1.5 §1 Legendary 「Campaign 100%」 — 서버가 다시 준 모금액으로 이번 후원이 목표를 넘긴 때만 1회.
if (campaignJustCompleted(before, fresh.card.raisedPop, fresh.card.goalPop)) fxHaptic(FxIntensity.legendary);
}
} on Object catch (_) {
// 다시 읽기 실패는 후원 결과와 무관하다 — 앞 화면을 그대로 둔다.
@@ -1301,3 +1305,7 @@ class _Round extends StatelessWidget {
),
);
}
/// 이번 후원 전 모금액 [before] 가 목표 [goal] 미만이었고 서버 확정 모금액 [raised] 가 목표에 닿았는가.
bool campaignJustCompleted(int before, int raised, int goal) =>
goal > 0 && before < goal && raised >= goal;