사용자 화면 문구·표본 데이터 · 퀘스트 참여 흐름 · HOME 진입 구획 · 미니맵 · 공통 확인 창 배치 수정
This commit is contained in:
@@ -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 =
|
||||
|
||||
Reference in New Issue
Block a user