From 8465be1d066b7a814425c57963aa67db29d0fe3a Mon Sep 17 00:00:00 2001 From: KIMGYEONGRAN Date: Tue, 23 Jun 2026 11:14:41 +0900 Subject: [PATCH] =?UTF-8?q?=EB=94=94=EC=9E=90=EC=9D=B8=202=EC=B0=A8=20?= =?UTF-8?q?=EC=B4=88=EC=95=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- assets/images/send.png | Bin 0 -> 34487 bytes lib/screens/chat_screen.dart | 290 ++++++++++++++++++----------------- pubspec.yaml | 2 + web/favicon.png | Bin 917 -> 0 bytes web/icons/favicon.png | Bin 0 -> 1924 bytes web/index.html | 2 +- 6 files changed, 156 insertions(+), 138 deletions(-) create mode 100644 assets/images/send.png delete mode 100644 web/favicon.png create mode 100644 web/icons/favicon.png diff --git a/assets/images/send.png b/assets/images/send.png new file mode 100644 index 0000000000000000000000000000000000000000..e0c8f85938ce6c1ecb8a855d0076980b98fbf2b2 GIT binary patch literal 34487 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 z ziu*5)85y}QSsP?-(##wVMrxQZ*r!_LI97xD9DN4=%ZH&hu&Re4nEUA!s{FJxC#O#M z*_pzEgvR>=T-T5~su^F^Xd8xu5rKa~5EQk|LB0~sdYZ$rX^M!U^85SK^&-GC|s>DS3>%Zbf=pWwapewr!1&yL1R9>D&uk`{h}=@D=AZvLbOTTp_2`M?$o&*y%ApYt~*nkD8diAX9(u> z!+nKI)`~E(-UUBlSM|jN65cl`dlZnPHN*5~74RE$v?D{*dr_AjQKY&kGmzWVoWeFi zcuD=6=!T^iObc}mqU`|vN4G6shBVbtujG?R^ zS&+V6ccX1G9(E9T7QtW0F|AaX zsmw`8Ftx&39>PJ;`UPHJ$p-qXIgV%&5tKdo|jfvyj_Wh?dEG z8bk9vj`-ENQ?9N;PUlQ^2(;IbXlv0Bs-g)g(n}IQKL*UjbR7_!#Mz77{@64{)l02% z&tON7%P`5G+vUdT9G0NPOQ_Jfsl$FOYGdbM$!`yUf`}eF|DyFp&xegsH*Oq3zhgYr zkaO7}vxq9bk(^n>ST9-f+Z?dpLy&Q@LyC2OMq>`NeU166z~6BYKSf@9#DV1xn3REh z3-VO`aD>2I06?pcpk)8z;F~2fCvyh}1`JAd6*AP_!~6Qoj%66Ey~IxX0N^ty z5Vn9Cp?zbh<~V3Xc0lm;9E;Ec^m=8zeYJtO-}li)Z@{n+{j{%)dmR}-KB^y12>!ha z0b|WQU#S;~&|0_hii#X7);b59>KyX*!rs?rBJ*=|K@bilF_E}8plxoZ4*QjUVJC3L z0u)J+9LGQJ@c7;gt&bKKw@cDNzy`I!9`+$u4R{VKDpbKajp2-3MU&gpj9s@%NlE$G z_~5QA_PaUc2LdQ>^KL^!R|X;5UZ{2l`%u=z?;h*iLgGgE`|{SUw!cJUqK$d(>27UQ zX-q)?FFHAgMc)UUxd5Gk8?kv;F($aOnscb!|2jQw#E-G9A3Ivg zc3?u`y)Jfg9JyV#j0)GRygMAU;t;NZ#lAJYEg~d@geriPU3yHO&~37hUH$K*R@@aL zbIa3H3=~A2^O$2YB{W{>&2J?G|JH`hJV$K5k2JI>qkQps%P31O5nq?tG%|72ez3bR zsMq!9)=C@xaMXMv4pxA9I}&RNnY|xFJf5Z)MhY%9z@z! zu6yAdgu+FIeOoEG zwa$vM+I!Mf!MW_dn7JSeUJ`W}DU6#`?@9b}LSLp3Ao<*(eJk9gWEh_*p7qkg)A=NS z-;0>xrR8OEd?j1)b^S{n_JbwQ?(JhF-vY@6pjRUPlHT{GS{yGCK$9%(PXF`qRBZD& zRI@C9`<#n7k+R{ye@l{;fcgP7?0Up0CUHu8S%0AkB9KHKKFk2#M0hXD+$iS>vV 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 { ), child: Center( child: Container( - margin: const EdgeInsets.all(40), // 메인 컨테이너 여백 조정 + margin: const EdgeInsets.all(30), // 메인 컨테이너 여백 조정 decoration: BoxDecoration( color: Colors.white.withOpacity(0.8), // 투명도 넣기 - borderRadius: BorderRadius.circular(16), // 모서리 둥글게 - border: Border.all(color: Color(0xFFE0E0E0), width: 1), + borderRadius: BorderRadius.circular(36), // 모서리 둥글게 + // border: Border.all(color: Color(0xFFE0E0E0), width: 1), ), child: Row( children: [ - // 좌측 캐릭터 영역 (60%) + // 좌측 캐릭터 영역 (50%) Expanded( - flex: 6, + flex: 5, child: Container( - margin: const EdgeInsets.all(20), - decoration: BoxDecoration( - color: Colors.white, - borderRadius: BorderRadius.circular(16), - border: Border.all( - color: Color(0xFFE0E0E0), - width: 1, - ), - ), + margin: const EdgeInsets.fromLTRB(30, 0, 30, 50), + // decoration: BoxDecoration( + // color: Colors.white, + // borderRadius: BorderRadius.circular(30), + // border: Border.all( + // color: Color(0xFFE0E0E0), + // width: 1, + // ), + // ), child: Column( children: [ // 헤더 Padding( - padding: const EdgeInsets.all(30), + padding: const EdgeInsets.fromLTRB(30, 66, 30, 30), child: Row( children: [ Container( @@ -210,15 +210,22 @@ class _ChatScreenState extends State { Expanded( child: Container( margin: const EdgeInsets.symmetric( - horizontal: 20, + horizontal: 30, ), decoration: BoxDecoration( color: Color(0xFFF5F5F5), - borderRadius: BorderRadius.circular(12), + borderRadius: BorderRadius.circular(30), + boxShadow: [ + BoxShadow( + color: Colors.black.withOpacity(0.1), // 그림자 색상 및 투명도 + blurRadius: 15, // 그림자가 퍼지는 정도 (숫자가 클수록 부드러움) + offset: const Offset(0, 5), // 그림자 위치 (x: 가로, y: 세로) + ), + ], ), child: _isVideoInitialized ? ClipRRect( - borderRadius: BorderRadius.circular(12), + borderRadius: BorderRadius.circular(30), child: AspectRatio( aspectRatio: _videoController .value @@ -266,84 +273,71 @@ class _ChatScreenState extends State { ), ), ), - const SizedBox(height: 40), + const SizedBox(height: 16), // 캐릭터 정보 + 설명 문구 - Padding( - padding: const EdgeInsets.only( - left: 30, - bottom: 30, - right: 30, + // 1. 가장 바깥쪽 박스 추가 + Container( + margin: const EdgeInsets.fromLTRB(30, 0, 30, 0), + padding: const EdgeInsets.all(24), + decoration: BoxDecoration( + color: Colors.white.withOpacity(0.9), + borderRadius: BorderRadius.circular(30), + //border: Border.all(color: const Color(0xFFE0E0E0), width: 1), + boxShadow: [ + BoxShadow( + color: Colors.black.withOpacity(0.1), // 그림자 색상 (투명도 조절) + blurRadius: 10, // 그림자가 퍼지는 정도 + offset: const Offset(0, 4), // 그림자의 위치 (x, y) - 아래쪽으로 살짝 그림자 + ), + ], ), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ - // 푸미 정보 Row( children: [ Container( width: 48, height: 48, decoration: BoxDecoration( - color: Color(0xFFC8E6C9), - // ← 연한 초록 배경 추가 - borderRadius: BorderRadius.circular( - 24, - ), + color: const Color(0xFFC8E6C9), + borderRadius: BorderRadius.circular(24), ), child: ClipRRect( - borderRadius: BorderRadius.circular( - 24, - ), - child: Image.asset( - 'assets/images/profile.png', - fit: BoxFit.cover, - ), + borderRadius: BorderRadius.circular(24), + child: Image.asset('assets/images/profile.png', fit: BoxFit.cover), ), ), const SizedBox(width: 12), - Column( - crossAxisAlignment: - CrossAxisAlignment.start, + const Column( + crossAxisAlignment: CrossAxisAlignment.start, children: [ - const Text( - '푸미', - style: TextStyle( - fontSize: 20, - fontWeight: FontWeight.w600, - color: Color(0xFF212121), - ), - ), - Text( - '스마트가든 AI 가이드', - style: TextStyle( - fontSize: 14, - color: Color(0xFF757575), - ), - ), + Text('푸미', style: TextStyle(fontSize: 20, fontWeight: FontWeight.w600, color: Color(0xFF212121))), + Text('스마트가든 AI 가이드', style: TextStyle(fontSize: 14, color: Color(0xFF757575))), ], ), ], ), - const SizedBox(height: 16), - // 설명 문구 (반응형) + const SizedBox(height: 20), + Container( - width: double.infinity, // ← 추가: 양쪽 꽉차게 + width: double.infinity, padding: const EdgeInsets.all(16), decoration: BoxDecoration( - color: Color(0xFFF1F8E9), - borderRadius: BorderRadius.circular(8), - border: Border.all( - color: Color(0xFFC8E6C9), - width: 1, - ), + color: const Color(0xFFF1F8E9), + borderRadius: BorderRadius.circular(12), + //border: Border.all(color: const Color(0xFFC8E6C9), width: 1), + boxShadow: [ + BoxShadow( + color: Colors.black.withOpacity(0.12), // 그림자 색상 및 투명도 + blurRadius: 15, // 그림자가 퍼지는 정도 (숫자가 클수록 부드러움) + offset: const Offset(0, 5), // 그림자 위치 (x: 가로, y: 세로) + ), + ], ), child: const Text( '안녕하세요!\n스마트가든의 식물들이 건강하게 자랄 수 있도록 도와드릴게요.\n궁금한 점을 언제든 물어보세요!', - style: TextStyle( - fontSize: 13, - color: Color(0xFF558B2F), - height: 1.6, - ), + style: TextStyle(fontSize: 14, color: Colors.black, height: 1.6), ), ), ], @@ -353,18 +347,25 @@ class _ChatScreenState extends State { ), ), ), - // 우측 채팅 영역 (40%) + // 우측 채팅 영역 (50%) Expanded( - flex: 4, + flex: 5, child: Container( - margin: const EdgeInsets.all(20), + margin: const EdgeInsets.all(50), decoration: BoxDecoration( - color: Color(0xFFFAFAFA), - borderRadius: BorderRadius.circular(16), - border: Border.all( - color: Color(0xFFE0E0E0), - width: 1, - ), + color: Color(0xFFfbfdf8), + borderRadius: BorderRadius.circular(30), + // border: Border.all( + // color: Color(0xFFE0E0E0), + // width: 1, + // ), + boxShadow: [ + BoxShadow( + color: Colors.black.withOpacity(0.1), // 그림자 색상 (투명도 조절) + blurRadius: 10, // 그림자가 퍼지는 정도 + offset: const Offset(0, 0), // 그림자 위치 (x: 가로, y: 세로) + ), + ], ), child: Column( children: [ @@ -398,26 +399,55 @@ class _ChatScreenState extends State { margin: const EdgeInsets.symmetric( horizontal: 16, ), + // decoration: BoxDecoration( + // image: DecorationImage( + // image: AssetImage( + // 'assets/images/chat_img.png', + // ), + // // ← 배경 이미지 추가 + // fit: BoxFit.cover, + // colorFilter: ColorFilter.mode( + // Colors.white.withOpacity(0.9), + // // 채팅 배경 이미지 투명도 조정 + // BlendMode.lighten, + // ), + // ), + // color: Colors.white.withOpacity(0.5), + // // 채팅창 투명도 + // borderRadius: BorderRadius.circular(30), + // border: Border.all( + // color: Color(0xFFE0E0E0), + // width: 0.5, + // ), + // boxShadow: [ + // BoxShadow( + // color: Colors.black.withOpacity(0.8), // 그림자 색상 (투명도 조절) + // blurRadius: 10, // 그림자가 퍼지는 정도 + // offset: const Offset(0, 0), // 그림자 위치 (x: 가로, y: 세로) + // ), + // ], + // ), decoration: BoxDecoration( + // 배경 이미지 설정 image: DecorationImage( - image: AssetImage( - 'assets/images/chat_img.png', - ), - // ← 배경 이미지 추가 + image: AssetImage('assets/images/chat_img.png'), fit: BoxFit.cover, colorFilter: ColorFilter.mode( - Colors.white.withOpacity(0.9), - // 채팅 배경 이미지 투명도 조정 + Colors.white.withOpacity(0.9), // 이미지 투명도 BlendMode.lighten, ), ), - color: Colors.white.withOpacity(0.5), - // 채팅창 투명도 - borderRadius: BorderRadius.circular(8), - border: Border.all( - color: Color(0xFFE0E0E0), - width: 0.5, - ), + borderRadius: BorderRadius.circular(30), + // 테두리(border) 제거됨 + + // 부드러운 그림자 추가 + boxShadow: [ + BoxShadow( + color: Colors.black.withOpacity(0.1), // 아주 연한 그림자 + blurRadius: 15, // 부드럽게 퍼짐 + offset: const Offset(0, 5), // 아래쪽으로 은은하게 + ), + ], ), child: ListView.builder( controller: _scrollController, @@ -435,8 +465,8 @@ class _ChatScreenState extends State { margin: const EdgeInsets.fromLTRB(16, 12, 16, 12), padding: const EdgeInsets.all(12), decoration: BoxDecoration( - color: Color(0xFFC8E6C9).withOpacity(0.3), // 배경 - borderRadius: BorderRadius.circular(12), + color: Color(0xFFecf6df).withOpacity(0.8), // 배경 + borderRadius: BorderRadius.circular(22), ), child: Row( children: [ @@ -446,12 +476,7 @@ class _ChatScreenState extends State { decoration: BoxDecoration( color: Colors.white, // ← 흰색 borderRadius: BorderRadius.circular(25), - border: Border.all( - color: Color( - 0xFF1976D2, - ).withOpacity(0.2), - width: 0.5, - ), + ), child: Material( color: Colors.transparent, @@ -493,7 +518,7 @@ class _ChatScreenState extends State { style: TextStyle( fontSize: 18, fontWeight: FontWeight.w600, - color: Color(0xFF000000), + color: Colors.black, ), ), ], @@ -510,12 +535,7 @@ class _ChatScreenState extends State { decoration: BoxDecoration( color: Colors.white, // ← 흰색 borderRadius: BorderRadius.circular(25), - border: Border.all( - color: Color( - 0xFF388E3C, - ).withOpacity(0.2), - width: 0.5, - ), + ), child: Material( color: Colors.transparent, @@ -574,12 +594,6 @@ class _ChatScreenState extends State { decoration: BoxDecoration( color: Colors.white, // ← 흰색 borderRadius: BorderRadius.circular(25), - border: Border.all( - color: Color( - 0xFFFFA000, - ).withOpacity(0.2), - width: 0.5, - ), ), child: Material( color: Colors.transparent, @@ -644,11 +658,18 @@ class _ChatScreenState extends State { child: Container( decoration: BoxDecoration( color: Colors.white, - borderRadius: BorderRadius.circular(8), - border: Border.all( - color: Color(0xFFE0E0E0), - width: 0.5, - ), + borderRadius: BorderRadius.circular(22), + // border: Border.all( + // color: Color(0xFFE0E0E0), + // width: 0.5, + // ), + boxShadow: [ + BoxShadow( + color: Colors.black.withOpacity(0.1), // 그림자 색상(연한 검정) + blurRadius: 8, // 그림자가 퍼지는 정도 + offset: const Offset(0, 2), // 그림자 위치 (x: 0, y: 2) - 아래로 살짝 + ), + ], ), child: TextField( controller: _textController, @@ -660,14 +681,14 @@ class _ChatScreenState extends State { decoration: InputDecoration( hintText: '메시지를 입력하세요...', hintStyle: TextStyle( - fontSize: 20, + fontSize: 16, color: Color(0xFF9E9E9E), ), border: InputBorder.none, contentPadding: const EdgeInsets.symmetric( horizontal: 16, - vertical: 12, + vertical: 22, ), ), style: const TextStyle(fontSize: 20), @@ -678,28 +699,23 @@ class _ChatScreenState extends State { const SizedBox(width: 12), // 전송 버튼 SizedBox( - height: 48, + height: 60, width: 60, child: ElevatedButton( - onPressed: () { - _sendMessage(_textController.text); - }, + onPressed: () => _sendMessage(_textController.text), style: ElevatedButton.styleFrom( - backgroundColor: Color(0xFF81C784), + backgroundColor: const Color(0xFF81C784), + elevation: 6, // 그림자 깊이 + shadowColor: Colors.black.withOpacity(0.4), // 그림자 색상 shape: RoundedRectangleBorder( - borderRadius: BorderRadius.circular( - 8, - ), + borderRadius: BorderRadius.circular(100), ), padding: EdgeInsets.zero, ), - child: const Text( - '전송', - style: TextStyle( - fontSize: 14, - fontWeight: FontWeight.w600, - color: Colors.white, - ), + child: ImageIcon( + AssetImage('assets/images/send.png'), + color: Colors.white, + size: 28, ), ), ), @@ -792,7 +808,7 @@ class _ChatBubble extends StatelessWidget { ), decoration: BoxDecoration( color: message.isUser - ? Color(0xFFE8F5E9) + ? Color(0xFFecf6df) : Colors.white, borderRadius: BorderRadius.circular(8), boxShadow: [ @@ -808,8 +824,8 @@ class _ChatBubble extends StatelessWidget { style: TextStyle( fontSize: 20, color: message.isUser - ? Color(0xFF000000) - : Color(0xFF424242), + ? Colors.black + : Colors.black, height: 1.4, ), ), diff --git a/pubspec.yaml b/pubspec.yaml index 12a15bf..d7dddf8 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -83,6 +83,8 @@ flutter: - assets/images/background1.png - assets/images/background2.png - assets/images/background3.png + - assets/images/send.png + - assets/images/layer_img.png - assets/images/layer_img1.png diff --git a/web/favicon.png b/web/favicon.png deleted file mode 100644 index 8aaa46ac1ae21512746f852a42ba87e4165dfdd1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 917 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|I14-?iy0X7 zltGxWVyS%@P(fs7NJL45ua8x7ey(0(N`6wRUPW#JP&EUCO@$SZnVVXYs8ErclUHn2 zVXFjIVFhG^g!Ppaz)DK8ZIvQ?0~DO|i&7O#^-S~(l1AfjnEK zjFOT9D}DX)@^Za$W4-*MbbUihOG|wNBYh(yU7!lx;>x^|#0uTKVr7USFmqf|i<65o z3raHc^AtelCMM;Vme?vOfh>Xph&xL%(-1c06+^uR^q@XSM&D4+Kp$>4P^%3{)XKjo zGZknv$b36P8?Z_gF{nK@`XI}Z90TzwSQO}0J1!f2c(B=V`5aP@1P1a|PZ!4!3&Gl8 zTYqUsf!gYFyJnXpu0!n&N*SYAX-%d(5gVjrHJWqXQshj@!Zm{!01WsQrH~9=kTxW#6SvuapgMqt>$=j#%eyGrQzr zP{L-3gsMA^$I1&gsBAEL+vxi1*Igl=8#8`5?A-T5=z-sk46WA1IUT)AIZHx1rdUrf zVJrJn<74DDw`j)Ki#gt}mIT-Q`XRa2-jQXQoI%w`nb|XblvzK${ZzlV)m-XcwC(od z71_OEC5Bt9GEXosOXaPTYOia#R4ID2TiU~`zVMl08TV_C%DnU4^+HE>9(CE4D6?Fz oujB08i7adh9xk7*FX66dWH6F5TM;?E2b5PlUHx3vIVCg!0Dx9vYXATM diff --git a/web/icons/favicon.png b/web/icons/favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..0ea16c88cb9461546d00c39f2c54a52328ad092c GIT binary patch literal 1924 zcmV-~2YdL5P)O~1DEmf1oX{*+Dl6u$9-fuHIJJ-X*?5@}LuGfxld{$b`Ip=qN z=euWrbIzIH5X;g*;6kwtiiPH7)l|kcyFP3=rnu9r@l7{tD8O&G*feQ=Q%|#rWmwfq z__D}(*WE@63i{&qvD|uqbQMmqP_t^onOgp<1)~UuIy-zE1%wa;IT>MIUKUtymQv~g zaG_lox(HtY1=f`0Y+B3hnBC(f!ut{PM*iDSb^&PomjH-m)j=B4DX^g1MsT(K_=;+& zC#81_KE{h7U*EEauqCw3JOi|5`cIZ)iJzBN|8GPCfad5(YT0RvIwA$VOW}T)cB4nt zwb{B|KPin}F&qO7YcgmobDJWsR@)iuxu5ERRZm@^qSOyV%5e0a+d>uvR<7&R+SAZ>L;mu z<#t5V*LQ!&rn&C5*QVqxp6CZZN8gmo(n?~Cc+&XTgrRPxL=sD z^W{4LfUqYDi4Cj^teg(>(Pf?y$_};Jte!fb(pD}tmom#%@o?jJ@xI_oYa`KDMzh5? z696Ev63&Ib_Un(zw>pMLlYz*UWdOVGD+B;B&Dz2T+54|_Gy3$4UqUz1JL&_T2nL1m z^eS@px=w=xSqxRtv$Up8{nrvn#WyFBpy-wp~B0Nl_4 zfG{6Jh>v~pVezf5qGjI{CI)}hQ#1e&5TmDXzxeD>fAHekZZ<_DgZ~u%arwrRKhCFW zE8n;fx$>(~@foYxJ|lnm?fd0hKe4FUWsFnCRQy#CvbWW_wR83&9{t{EKsuxKveO+6 z4=V4@yqQ^;AMwrHn2^q>0ANv5NY^|6_MyJ-EGLG4+I`3AEZpoF z1ISzmidE{^7Lvb`8|s_w=RN&z%RqgYh|7*Kw zzc^zF-grvnaf5k2KxO286cw%fK{xc}rN~T)-R8h6ngl=YG*~%6>Ntgh~ z%1T*Xk^!JUba5jfo*jRBvF)<4f8kAJ-&9QYO~rPzG0cKoR+j((inihe#IsL3+%^c9 z4*9D?gZD(hFkS$Fsy#lG*>1v6z|-68>G67^002$jbw%Abds+?;0?UXt08nZ{(^E<> z`@ONpb^KsM&{izg^yJR7!&CW$d89E801mZU3xHu}4sD{2e8z2iGo5GJ>ft0&iFFxdkv1r`dK>P8rd9?3c;;wU#A@xcFWSp2iAq+>UPMpfn!mnh4$@;h=tlUTGO{ zlb&-ykN@Mt4wp>f=9V>^V`WIfCvnk17d$Gb40Xyxsj?Piw~>G*|JgX-tza$CJo&bSnml-+=;+?F(wb+bW85e!?e9qy~;AInFx&D5jo$92<(K!iI@tG zy~8nV4WM()dQ#JhAcO$TmxhEa0zgVlU&+=BM|$M#MbsBDN2I~)jp7`znSLg!RsbPP zqpBqy02Vc?9?jK@=Zi+=*iz99Aqeq7^b6s8BIjENaJ9X?nL2lcg8+oI#JdKr_-0u# zweh-LkJ{AowEyx=X#3SJ>4wgyBaU#Yz - + smartgarden_chat