Skip to content

Commit

Permalink
Merge pull request #34 from UniBond-jijijin/feature/#4-CreatePost
Browse files Browse the repository at this point in the history
Feature/#4 create post
  • Loading branch information
Jinyshin authored Nov 19, 2023
2 parents bba56e3 + f73d0bb commit e821c47
Show file tree
Hide file tree
Showing 5 changed files with 176 additions and 57 deletions.
2 changes: 1 addition & 1 deletion unibond/lib/resources/app_colors.dart
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ class AppColors {
static const Color contentColorOrange = Color(0xFFFF8080);
static const Color contentColorGreen = Color(0xFF3BD79D);
static const Color contentColorPurple = Color.fromARGB(255, 122, 69, 214);
static const Color contentColorPink = Color(0xFFFF3AF2);
static const Color contentColorPink = Color(0xFFFF6292);
static const Color contentColorRed = Color(0xFFE80054);
static const Color contentColorLightBlue = Color(0xFF7091CF);
}
48 changes: 48 additions & 0 deletions unibond/lib/screens/community/post_write_screen.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:unibond/screens/home_screen.dart';
import 'package:unibond/util/validator_util.dart';
import 'package:unibond/widgets/custom_text_form_field.dart';
import 'package:unibond/widgets/custom_textarea.dart';
import 'package:unibond/widgets/custon_elevated_button.dart';

class WriteScreen extends StatelessWidget {
final _formKey = GlobalKey<FormState>();
WriteScreen({super.key});

@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
centerTitle: true,
title: const Text('게시물 작성'),
leading: IconButton(
icon: const Icon(Icons.arrow_back_ios),
onPressed: () {
Get.back();
},
),
),
body: Padding(
padding: const EdgeInsets.all(16.0),
child: Form(
key: _formKey,
child: ListView(
children: [
CustomTextFormField(hint: "제목", funvalidator: validateTitle),
CustomTextArea(hint: "내용", funvalidator: validateContent),
CustomElevatedButton(
text: "작성 완료",
screenRoute: () {
if (isValid(_formKey)) {
Get.off(() => const HomeScreen());
}
},
),
],
),
),
),
);
}
}
127 changes: 71 additions & 56 deletions unibond/lib/screens/home_screen.dart
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:unibond/resources/app_colors.dart';
import 'package:unibond/screens/community/post_detail_screen.dart';
import 'package:unibond/screens/community/post_write_screen.dart';
import 'package:unibond/screens/letter/letter_box_screen.dart';
import 'package:unibond/screens/user/profile_screen.dart';
import 'package:unibond/widgets/navigator.dart';
Expand Down Expand Up @@ -35,71 +37,73 @@ class HomeScreen extends StatelessWidget {
end: Alignment.bottomCenter,
),
),
child: Column(
mainAxisAlignment: MainAxisAlignment.start,
children: [
const SizedBox(height: 100),
Padding(
padding: const EdgeInsets.symmetric(horizontal: 16.0),
child: Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Container(
height: 120,
width: 170,
decoration: BoxDecoration(
gradient: const LinearGradient(
colors: [Color(0xFF7A34AC), Color(0xFF87ADFF)],
begin: Alignment.topCenter,
end: Alignment.bottomCenter,
),
border: Border.all(
width: 5,
color: Colors.white,
),
borderRadius: BorderRadius.circular(30),
),
child: const Padding(
padding: EdgeInsets.all(12.0),
child: Text(
"질문",
style: TextStyle(
child: SingleChildScrollView(
child: Column(
mainAxisAlignment: MainAxisAlignment.start,
children: [
const SizedBox(height: 100),
Padding(
padding: const EdgeInsets.symmetric(horizontal: 16.0),
child: Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Container(
height: 120,
width: 170,
decoration: BoxDecoration(
gradient: const LinearGradient(
colors: [Color(0xFF7A34AC), Color(0xFF87ADFF)],
begin: Alignment.topCenter,
end: Alignment.bottomCenter,
),
border: Border.all(
width: 5,
color: Colors.white,
fontSize: 18,
),
borderRadius: BorderRadius.circular(30),
),
),
),
const SizedBox(width: 20),
Container(
height: 120,
width: 170,
decoration: BoxDecoration(
gradient: const LinearGradient(
colors: [Color(0xFFFF6292), Color(0xFFFFF1DF)],
begin: Alignment.topCenter,
end: Alignment.bottomCenter,
child: const Padding(
padding: EdgeInsets.all(12.0),
child: Text(
"질문",
style: TextStyle(
color: Colors.white,
fontSize: 18,
),
),
),
// border: Border.all(
// width: 0,
// ),
borderRadius: BorderRadius.circular(30),
),
child: const Padding(
padding: EdgeInsets.all(12.0),
child: Text(
"경험기록",
style: TextStyle(
color: Colors.white,
fontSize: 18,
const SizedBox(width: 20),
Container(
height: 120,
width: 170,
decoration: BoxDecoration(
gradient: const LinearGradient(
colors: [Color(0xFFFF6292), Color(0xFFFFF1DF)],
begin: Alignment.topCenter,
end: Alignment.bottomCenter,
),
// border: Border.all(
// width: 0,
// ),
borderRadius: BorderRadius.circular(30),
),
child: const Padding(
padding: EdgeInsets.all(12.0),
child: Text(
"경험기록",
style: TextStyle(
color: Colors.white,
fontSize: 18,
),
),
),
),
),
],
],
),
),
),
],
],
),
),
),
),
Expand Down Expand Up @@ -160,6 +164,17 @@ class HomeScreen extends StatelessWidget {
}
},
),
floatingActionButton: FloatingActionButton.extended(
onPressed: () {
Get.to(() => WriteScreen());
},
elevation: 4,
label: const Text('글쓰기'),
icon: const Icon(Icons.mode_edit_outlined),
shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(30)),
foregroundColor: Colors.white,
backgroundColor: AppColors.contentColorPink,
),
);
}
}
Expand Down
20 changes: 20 additions & 0 deletions unibond/lib/util/validator_util.dart
Original file line number Diff line number Diff line change
Expand Up @@ -37,3 +37,23 @@ Function validatePassword = (String? value) {
return null;
}
};

Function validateTitle = (String? value) {
if (value == null || value.isEmpty) {
return "값을 입력해주세요.";
} else if (value.length > 30) {
return "제목은 30자 이하로 입력해주세요.";
} else {
return null;
}
};

Function validateContent = (String? value) {
if (value == null || value.isEmpty) {
return "값을 입력해주세요.";
} else if (value.length > 500) {
return "내용은 500자 이하로 입력해주세요.";
} else {
return null;
}
};
36 changes: 36 additions & 0 deletions unibond/lib/widgets/custom_textarea.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
import 'package:flutter/material.dart';

class CustomTextArea extends StatelessWidget {
final String hint;
final funvalidator;

const CustomTextArea(
{super.key, required this.hint, required this.funvalidator});

@override
Widget build(BuildContext context) {
return Padding(
padding: const EdgeInsets.symmetric(vertical: 5.0),
child: TextFormField(
maxLines: 14,
validator: funvalidator,
style: const TextStyle(fontSize: 14),
decoration: InputDecoration(
hintText: "$hint을(를) 입력하세요",
enabledBorder: OutlineInputBorder(
borderRadius: BorderRadius.circular(20),
),
focusedBorder: OutlineInputBorder(
borderRadius: BorderRadius.circular(20),
),
errorBorder: OutlineInputBorder(
borderRadius: BorderRadius.circular(20),
),
focusedErrorBorder: OutlineInputBorder(
borderRadius: BorderRadius.circular(20),
),
),
),
);
}
}

0 comments on commit e821c47

Please sign in to comment.