사용자 화면 문구·표본 데이터 · 퀘스트 참여 흐름 · HOME 진입 구획 · 미니맵 · 공통 확인 창 배치 수정

This commit is contained in:
Sn-Kinos
2026-10-05 00:44:39 +09:00
parent c8d29d032b
commit 8a0297eb92
66 changed files with 1812 additions and 959 deletions
+7
View File
@@ -198,6 +198,9 @@ abstract interface class InsideRepository {
/// 채택(`fn-answer-accept`). 현상금이 답변자에게 간다. 번복되지 않는다.
Future<void> accept(String questionId, String answerId);
/// 내가 쓴 질문 — MY > 활동 > 인사이드. 최신순.
Future<List<InsideQuestion>> mine();
}
/// 현상금 Q&A 실패를 화면 문구로 — 서버 카탈로그 코드(`E-QNA-*` 등)로 가른다.
@@ -312,6 +315,10 @@ class SampleInsideRepository implements InsideRepository {
@override
Future<int> balance() async => 12_400;
@override
Future<List<InsideQuestion>> mine() async =>
_sorted(InsideSort.latest).where((q) => q.isMine).toList();
@override
Future<int> minBounty() async => 100;
@@ -1,5 +1,7 @@
import 'package:flutter/material.dart';
import '../../core/ui/app_dialog.dart';
import '../../core/i18n/app_locale.dart';
import '../../core/theme/tokens.dart';
import '../../core/ui/app_icons.dart';
@@ -105,25 +107,12 @@ class _InsideDetailScreenState extends State<InsideDetailScreen> {
a.id.isNotEmpty;
Future<void> _accept(InsideAnswer a) async {
final ok = await showDialog<bool>(
context: context,
builder: (dialog) => AlertDialog(
content: Text(
context.l10n.insideAcceptConfirm('${question.bountyPop}'),
),
actions: [
TextButton(
onPressed: () => Navigator.of(dialog).pop(false),
child: Text(context.l10n.commonCancel),
),
TextButton(
onPressed: () => Navigator.of(dialog).pop(true),
child: Text(context.l10n.insideAccept),
),
],
),
final ok = await showConfirmDialog(
context,
context.l10n.insideAcceptConfirm('${question.bountyPop}'),
confirmLabel: context.l10n.insideAccept,
);
if (ok != true || _busy || !mounted) return;
if (!ok || _busy || !mounted) return;
setState(() => _busy = true);
try {
await widget.repository!.accept(question.id, a.id);
@@ -95,6 +95,18 @@ class FirestoreInsideRepository implements InsideRepository {
);
}
/// 팬덤과 상관없이 내가 쓴 질문 전부(`authorUid` 등호 하나라 복합 색인이 필요 없다).
// ponytail: 정렬은 앱에서 한다. 한 사람의 질문이 수백 건을 넘으면 orderBy + 복합 색인 + 페이지로.
@override
Future<List<InsideQuestion>> mine() async {
final snap = await _backend.db
.collection('questions')
.where('authorUid', isEqualTo: _backend.requireUid)
.get();
return [for (final doc in snap.docs) _question(doc)]
..sort((a, b) => b.createdAt.compareTo(a.createdAt));
}
@override
Future<int> balance() async {
final wallet =