Skip to content

Commit

Permalink
feat: 신고하기 뷰 완성
Browse files Browse the repository at this point in the history
  • Loading branch information
HI-JIN2 committed Jan 8, 2025
1 parent d521ed9 commit 72d07a9
Show file tree
Hide file tree
Showing 5 changed files with 181 additions and 2 deletions.
1 change: 1 addition & 0 deletions lib/constants/paths.dart
Original file line number Diff line number Diff line change
Expand Up @@ -37,4 +37,5 @@ abstract class Paths {
static const String timeChecking = '/time_checking';

static const String report = '/report';
static const String reportDetail = '/report_detail';
}
89 changes: 89 additions & 0 deletions lib/features/home/report/report_detail_screen.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,89 @@
import 'package:cogo/common/widgets/atoms/texts/styles.dart';
import 'package:cogo/common/widgets/components/basic_button.dart';
import 'package:cogo/common/widgets/components/basic_textfield.dart';
import 'package:cogo/common/widgets/components/secondary_button.dart';
import 'package:cogo/constants/colors.dart';
import 'package:cogo/features/home/report/report_view_model.dart';
import 'package:flutter/material.dart';
import 'package:flutter_svg/svg.dart';
import 'package:provider/provider.dart';

class ReportDetailScreen extends StatelessWidget {
const ReportDetailScreen({super.key});

@override
Widget build(BuildContext context) {
return ChangeNotifierProvider(
create: (context) => ReportViewModel(),
child: Scaffold(
backgroundColor: CogoColor.white50,
resizeToAvoidBottomInset: true,
appBar: AppBar(
backgroundColor: CogoColor.white50,
title: const Text(
"신고하기",
style: CogoTextStyle.body20,
),
centerTitle: true,
leading: IconButton(
icon: SvgPicture.asset('assets/icons/button/chevron_left.svg'),
onPressed: () => Navigator.of(context).pop(),
),
),
body: SingleChildScrollView(
child: SafeArea(
child: Padding(
padding: const EdgeInsets.all(20.0),
child: Consumer<ReportViewModel>(
builder: (context, viewModel, child) {
return Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
const Text(
"신고 세부 내용",
style: CogoTextStyle.body16,
),
const SizedBox(height: 10),
BasicTextField(
controller: viewModel.reportController,
hintText: '신고하실 내용을 자세히 작성해주세요',
currentCount: viewModel.reportCharCount,
maxCount: 200,
size: BasicTextFieldSize.LARGE,
maxLines: 1,
),
const SizedBox(height: 10),
const Text('유의사항', style: CogoTextStyle.bodySB14),
const SizedBox(height: 10),
const Text(
'신고 후 신고 내역에 따라 해당 유저에게 안내가 이루어질 예정입니다.\n각 항목 별 세부 사항은 다음과 같습니다.\n\n'
'멘토링의 목적이 아닌것\n- 종교단체\n - 사업목적 (보험, 광고, etc)\n- 기타 멘토링으로 의도되지 않는 모든 행위\n\n'
'멘토링 과정에서 비매너 행위 발생\n- 잘못된 정보 제공\n- 상대방에 부적절한 언행\n- 기타 양자간 분쟁 가능성이 있는 비매너 행위',
style: CogoTextStyle.body9,
),
const SizedBox(height: 30),
Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
SecondaryButton(
text: '취소',
onPressed: () => Navigator.of(context).pop(),
),
const SizedBox(width: 16), // 버튼들 사이에 16만큼 간격을 추가
BasicButton(
text: '신고',
isClickable: true,
onPressed: viewModel.postReport,
)
],
)
],
);
}),
),
),
),
),
);
}
}
69 changes: 68 additions & 1 deletion lib/features/home/report/report_screen.dart
Original file line number Diff line number Diff line change
@@ -1,5 +1,10 @@
import 'package:cogo/common/widgets/atoms/texts/styles.dart';
import 'package:cogo/constants/colors.dart';
import 'package:cogo/constants/paths.dart';
import 'package:cogo/features/home/report/report_view_model.dart';
import 'package:flutter/material.dart';
import 'package:flutter_svg/svg.dart';
import 'package:go_router/go_router.dart';
import 'package:provider/provider.dart';

class ReportScreen extends StatelessWidget {
Expand All @@ -10,8 +15,70 @@ class ReportScreen extends StatelessWidget {
return ChangeNotifierProvider(
create: (context) => ReportViewModel(),
child: Scaffold(
backgroundColor: CogoColor.white50,
resizeToAvoidBottomInset: true,
appBar: AppBar(
title: const Text("신고하기"),
backgroundColor: CogoColor.white50,
title: const Text(
"신고하기",
style: CogoTextStyle.body20,
),
centerTitle: true,
leading: IconButton(
icon: SvgPicture.asset('assets/icons/button/chevron_left.svg'),
onPressed: () => Navigator.of(context).pop(),
),
),
body: SingleChildScrollView(
child: SafeArea(
child: Padding(
padding: const EdgeInsets.all(20.0),
child: Consumer<ReportViewModel>(
builder: (context, viewModel, child) {
return Column(
children: [
ListTile(
title: const Text(
'멘토링의 목적을 가지고 멘토가 만난것 같지 않아요',
style: CogoTextStyle.body16,
),
trailing: const Icon(Icons.chevron_right),
onTap: () {
context.push(Paths.reportDetail);
},
),
ListTile(
title: const Text(
'멘토링 중에 분쟁 발생했어요',
style: CogoTextStyle.body16,
),
trailing: const Icon(Icons.chevron_right),
onTap: () {
context.push(Paths.reportDetail);
},
),
ListTile(
title: const Text(
'멘토의 소속이나, 인적사항이 거짓인것 같아요',
style: CogoTextStyle.body16,
),
trailing: const Icon(Icons.chevron_right),
onTap: () {
context.push(Paths.reportDetail);
},
),
ListTile(
title: const Text('기타 부적절한 행위가 있었어요',
style: CogoTextStyle.body16),
trailing: const Icon(Icons.chevron_right),
onTap: () {
context.push(Paths.reportDetail);
}),
],
);
}),
),
),
),
),
);
Expand Down
16 changes: 15 additions & 1 deletion lib/features/home/report/report_view_model.dart
Original file line number Diff line number Diff line change
@@ -1,3 +1,17 @@
import 'package:flutter/cupertino.dart';

class ReportViewModel extends ChangeNotifier {}
class ReportViewModel extends ChangeNotifier {
final TextEditingController reportController = TextEditingController();

int get reportCharCount => reportController.text.length;

ReportViewModel() {
reportController.addListener(() {
notifyListeners();
});
}

bool postReport() {
return true;
}
}
8 changes: 8 additions & 0 deletions lib/route/routes.dart
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ import 'package:cogo/features/home/mentor_detail/views/mentor_introduction_scree
import 'package:cogo/features/home/mentor_detail/views/mentor_question1_screen.dart';
import 'package:cogo/features/home/mentor_detail/views/mentor_question2_screen.dart';
import 'package:cogo/features/home/profile/profile_detail_screen.dart';
import 'package:cogo/features/home/report/report_detail_screen.dart';
import 'package:cogo/features/home/report/report_screen.dart';
import 'package:cogo/features/home/search/search_screen.dart';
import 'package:cogo/features/mypage/mentor_introduce/my_mentor_introduce_screen.dart';
Expand Down Expand Up @@ -250,6 +251,13 @@ final AppRouter = GoRouter(
child: const ReportScreen(),
),
),
GoRoute(
path: Paths.reportDetail,
pageBuilder: (context, state) => MaterialPage(
key: state.pageKey,
child: const ReportDetailScreen(),
),
),
StatefulShellRoute.indexedStack(
builder: (context, state, navigationShell) {
return ScaffoldWithNestedNavigation(
Expand Down

0 comments on commit 72d07a9

Please sign in to comment.