From cecdf13ab3e9b8d08c81e77538300270e0891abf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=9D=B4=EC=88=98=EB=B9=88?= <97301965+LeeSubin3020@users.noreply.github.com> Date: Mon, 18 Mar 2024 15:06:47 +0900 Subject: [PATCH] =?UTF-8?q?=EC=A3=BC=EC=86=8C=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 주소 변경으로 인한 viewmodel 코드 수정 --- lib/viewmodels/ChattingVM.dart | 7 ++++-- lib/viewmodels/LoginVM.dart | 2 +- lib/viewmodels/SignupVM.dart | 35 ++++++++++++++++++++++++++++++ lib/views/ChattingScreen.dart | 39 ++++++++++++++++++++++++++-------- lib/views/LoginScreen.dart | 3 ++- 5 files changed, 73 insertions(+), 13 deletions(-) diff --git a/lib/viewmodels/ChattingVM.dart b/lib/viewmodels/ChattingVM.dart index 8803107..5bf7efe 100644 --- a/lib/viewmodels/ChattingVM.dart +++ b/lib/viewmodels/ChattingVM.dart @@ -7,7 +7,7 @@ import 'package:suwon/models/chat_model.dart'; class ChatViewModel extends ChangeNotifier { StompClient? client; - String serverUrl = 'ws://3.35.83.91:8080/stomp'; + String serverUrl = 'ws://43.202.91.160:8080/stomp'; String sendEndpoint = '/pub/chat/message/1234'; List chatMessages = []; @@ -33,7 +33,7 @@ class ChatViewModel extends ChangeNotifier { Map jsonData = json.decode(frame.body!); Message message = Message.fromJson(jsonData); chatMessages.add(message); - notifyListeners(); // 새로운 메시지가 추가될 때마다 호출 + notifyListeners(); // 수정된 부분: 새로운 메시지가 추가될 때마다 화면을 업데이트 } }, ); @@ -46,5 +46,8 @@ class ChatViewModel extends ChangeNotifier { Message(roomId: '1234', sender: 'your_name', contents: message) .toJson()), ); + + print(message); + notifyListeners(); } } diff --git a/lib/viewmodels/LoginVM.dart b/lib/viewmodels/LoginVM.dart index 0dbae9a..1ef5df8 100644 --- a/lib/viewmodels/LoginVM.dart +++ b/lib/viewmodels/LoginVM.dart @@ -23,7 +23,7 @@ class LoginVM extends ChangeNotifier { Future login() async { try { - final apiUrl = Uri.parse('http://3.35.83.91:8080/member/sign-in'); + final apiUrl = Uri.parse('http://43.202.91.160:8080/member/sign-in'); final requestBody = { "account": _userid, "password": _userpw, diff --git a/lib/viewmodels/SignupVM.dart b/lib/viewmodels/SignupVM.dart index 708764e..a4737ed 100644 --- a/lib/viewmodels/SignupVM.dart +++ b/lib/viewmodels/SignupVM.dart @@ -139,4 +139,39 @@ class SignupVM extends ChangeNotifier { print('Signup failed: $error'); } } + + //id 중복체크 + Future idcheck(UserModel userModel) async { + try { + // Convert UserModel to Map + Map userMap = { + "account": userModel.account, + }; + // Encode Map to JSON String + String signupData = json.encode(userMap); + + // Make a POST request to your backend API + final response = await http.post( + Uri.parse("http://43.202.91.160:8080/member/check-duplicate-id-signUp"), + headers: { + 'Content-Type': 'application/json', + }, + body: signupData, + ); + + print(userMap); + + // 응답 상태 확인 + if (response.statusCode == 200) { + // 회원가입 성공 시, 필요한 경우 응답을 처리 + print('사용 가능한 닉네임입니다.'); + } else { + // 회원가입 실패 시, 에러 처리 + print('이미 존재하는 닉네임 입니다. - ${response.statusCode}: ${response.body}'); + } + } catch (error) { + // 회원가입 과정에서 발생하는 에러 처리 + print('idcheck: $error'); + } + } } diff --git a/lib/views/ChattingScreen.dart b/lib/views/ChattingScreen.dart index c6bf8a9..4a5d2b9 100644 --- a/lib/views/ChattingScreen.dart +++ b/lib/views/ChattingScreen.dart @@ -1,3 +1,5 @@ +import 'dart:html'; + import 'package:flutter/material.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:flutter_svg/flutter_svg.dart'; @@ -14,12 +16,31 @@ class RandomChat extends StatefulWidget { class _RandomChatState extends State { late ChatViewModel viewModel; + final ScrollController _scrollController = ScrollController(); @override void initState() { super.initState(); viewModel = Provider.of(context, listen: false); viewModel.initialize(); + + viewModel.addListener(_scrollToEnd); // 새 메시지 추가 시 스크롤 + } + + @override + void dispose() { + _scrollController.dispose(); // 리소스 해제 + super.dispose(); + } + + void _scrollToEnd() { + if (_scrollController.hasClients) { + _scrollController.animateTo( + _scrollController.position.maxScrollExtent, + duration: Duration(milliseconds: 300), + curve: Curves.easeOut, + ); + } } @override @@ -34,13 +55,13 @@ class _RandomChatState extends State { children: [ _Header(), Expanded( - child: SingleChildScrollView( - child: Column( - children: viewModel.chatMessages - .map( - (message) => _ChatBubble(message: message.contents)) - .toList(), - ), + child: ListView.builder( + controller: _scrollController, + itemCount: viewModel.chatMessages.length, + itemBuilder: (context, index) { + final message = viewModel.chatMessages[index]; + return _ChatBubble(message: message.contents); + }, ), ), Container( @@ -136,7 +157,7 @@ class _Header extends StatelessWidget { ], ), ), - SizedBox(width: 95.w), + SizedBox(width: 130.w), GestureDetector( child: SvgPicture.asset( 'assets/Report button.svg', @@ -180,7 +201,7 @@ class _ChatBubble extends StatelessWidget { ), child: Text( message, - style: TextStyle(color: Colors.white), + style: TextStyle(color: Colors.black), ), ); } diff --git a/lib/views/LoginScreen.dart b/lib/views/LoginScreen.dart index 91fae1b..3770c7e 100644 --- a/lib/views/LoginScreen.dart +++ b/lib/views/LoginScreen.dart @@ -3,6 +3,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:suwon/views/ChangePasswordScreen.dart'; +import 'package:suwon/views/ChattingScreen.dart'; import 'package:suwon/views/SearchIdScreen.dart'; import 'package:suwon/views/HomeScreen.dart'; import 'package:suwon/views/SignUpScreen.dart'; @@ -104,7 +105,7 @@ class LoginScreen extends StatelessWidget { Navigator.push( context, MaterialPageRoute( - builder: (context) => SearchPasswordScreen()), + builder: (context) => RandomChat()), ); }, child: TextFontWidget.fontRegular(