번역 평가 버튼 · 내 퀘스트 검토 버튼 · MY 질문 상세 · MY 완료 퀘스트 수 · 행성/성운 칸 · 라운지 빈 상태 수정

This commit is contained in:
Sn-Kinos
2026-10-05 15:12:33 +09:00
parent 5ad229b971
commit f84d696c21
18 changed files with 666 additions and 365 deletions
+60 -51
View File
@@ -40,10 +40,12 @@ class _PaymentHistoryScreenState extends State<PaymentHistoryScreen> {
await Store.instance?.restore();
} on Exception {
if (!mounted) return;
ScaffoldMessenger.of(context).showSnackBar(SnackBar(
behavior: SnackBarBehavior.floating,
content: Text(context.l10n.storeConnectFailed),
));
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(
behavior: SnackBarBehavior.floating,
content: Text(context.l10n.storeConnectFailed),
),
);
return;
}
await _load();
@@ -63,7 +65,10 @@ class _PaymentHistoryScreenState extends State<PaymentHistoryScreen> {
// 구매 복원 — 재설치 · 기기 변경 뒤 Focus 구독을 되살린다. 스토어가 돌려준
// 구매는 서버가 거래 ID 로 멱등 검증하므로 두 번 지급되지 않는다.
if (Store.instance != null)
TextButton(onPressed: _restore, child: Text(context.l10n.payRestore)),
TextButton(
onPressed: _restore,
child: Text(context.l10n.payRestore),
),
],
),
body: Column(
@@ -219,7 +224,11 @@ class _PaymentDetailScreenState extends State<PaymentDetailScreen> {
),
_Row(label: context.l10n.payMethod, value: p.method),
_Row(label: context.l10n.payStatus, value: p.state.label),
_Row(label: context.l10n.payAmount, value: '₩ ${_won(p.price)}', amount: true),
_Row(
label: context.l10n.payAmount,
value: '₩ ${_won(p.price)}',
amount: true,
),
const SizedBox(height: 8),
Text(context.l10n.payRefundInfo, style: _guide),
const SizedBox(height: 6),
@@ -328,51 +337,51 @@ class _RefundRequestScreenState extends State<RefundRequestScreen> {
),
// 디폴트 미선택 · 단수 선택.
body: ListView(
children: [
Container(
height: 32,
color: const Color(0xFF232325),
padding: const EdgeInsets.symmetric(horizontal: 16),
alignment: Alignment.centerLeft,
child: Text(
context.l10n.refundReason,
style: myText(
12,
FontWeight.w600,
color: const Color(0xFF909091),
height: 1,
children: [
Container(
height: 32,
color: const Color(0xFF232325),
padding: const EdgeInsets.symmetric(horizontal: 16),
alignment: Alignment.centerLeft,
child: Text(
context.l10n.refundReason,
style: myText(
12,
FontWeight.w600,
color: const Color(0xFF909091),
height: 1,
),
),
),
for (final reason in RefundRequestScreen.reasons)
GestureDetector(
behavior: HitTestBehavior.opaque,
onTap: () => setState(() => _reason = reason),
child: Container(
height: 48,
margin: const EdgeInsets.symmetric(horizontal: 16),
decoration: const BoxDecoration(
border: Border(bottom: BorderSide(color: Color(0xFF313131))),
),
child: Row(
children: [
AppRadio(selected: _reason == reason),
const SizedBox(width: 8),
Text(
reason,
style: myText(
16,
FontWeight.w600,
color: const Color(0xFFD1D1D2),
height: 1,
),
),
],
),
),
),
for (final reason in RefundRequestScreen.reasons)
GestureDetector(
behavior: HitTestBehavior.opaque,
onTap: () => setState(() => _reason = reason),
child: Container(
height: 48,
margin: const EdgeInsets.symmetric(horizontal: 16),
decoration: const BoxDecoration(
border: Border(bottom: BorderSide(color: Color(0xFF313131))),
),
child: Row(
children: [
AppRadio(selected: _reason == reason),
const SizedBox(width: 8),
Text(
reason,
style: myText(
16,
FontWeight.w600,
color: const Color(0xFFD1D1D2),
height: 1,
),
),
],
),
),
),
],
),
],
),
);
/// 확인 — 시안 `506:14615` iOS 경고창 「정말 환불 신청을 할까요?」.
@@ -397,9 +406,9 @@ class _RefundRequestScreenState extends State<RefundRequestScreen> {
// 서버·Admin 에는 기준 언어(ko) 사유를 남긴다 — 화면 언어에 따라 원장 값이 갈리지 않게.
await widget.repository.requestRefund(
widget.paymentId,
RefundRequestScreen.reasonsOf(
koL10n,
)[RefundRequestScreen.reasons.indexOf(_reason!)],
RefundRequestScreen.reasonsOf(koL10n)[RefundRequestScreen.reasons.indexOf(
_reason!,
)],
);
if (mounted) Navigator.of(context).pop(_reason);
}