From 533751865a9637f45f1614b312f4427bba916af6 Mon Sep 17 00:00:00 2001 From: Mooner92 <54096383+mooner92@users.noreply.github.com> Date: Tue, 19 Sep 2023 23:50:04 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20comment=20(#9)=20=EB=A7=88=EC=9D=B4?= =?UTF-8?q?=ED=8E=98=EC=9D=B4=EC=A7=80=20=ED=98=B8=EA=B0=90=EB=8F=84=20?= =?UTF-8?q?=EB=B0=94=EB=8A=94=20=EC=A0=9C=EB=8C=80=EB=A1=9C=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84=ED=95=9C=EA=B1=B4=20=EC=95=84=EB=8B=88=EC=A7=80?= =?UTF-8?q?=EB=A7=8C...?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- assets/images/favorate_bar.png | Bin 0 -> 6981 bytes lib/screens/mypage.dart | 278 +++++++++++++++++++++++++++++++++ lib/screens/site_detail.dart | 8 + pubspec.yaml | 1 + 4 files changed, 287 insertions(+) create mode 100644 assets/images/favorate_bar.png create mode 100644 lib/screens/mypage.dart diff --git a/assets/images/favorate_bar.png b/assets/images/favorate_bar.png new file mode 100644 index 0000000000000000000000000000000000000000..6566cd7d6db7c507072503880eb20a09de7a4b1b GIT binary patch literal 6981 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 _MyPageState(); +} + +class _MyPageState extends State { + List people = []; + List personImageFileNames = List.generate(19, (index) => 'img${index + 1}.jpeg'); + bool _isLoading = true; + + Future fetchPeopleFromDatabase() async { + final response = await http.get(Uri.parse('http://18.188.95.144/person_data_return.php')); + if (response.statusCode == 200) { + final jsonData = json.decode(response.body); + final List fetchedPeople = []; + int index=0; + for (var personData in jsonData) { + final person = Person( + c_id: personData['character_id'] ?? '', + name: personData['name'] ?? '', + mbti: personData['mbti'] ?? '', + birth_Date: personData['birth_date'] ?? '', + death_Date: personData['death_date'] ?? '', + era: personData['era'] ?? '', + description: personData['description'] ?? '', + imageFileName: personImageFileNames[index % personImageFileNames.length], + ); + fetchedPeople.add(person); + index++; + } + + setState(() { + people = fetchedPeople; + _isLoading = false; + }); + print("Received data: $jsonData"); + } + } + + @override + void initState() { + super.initState(); + fetchPeopleFromDatabase(); + } + + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: AppBar( + title: Text('마이페이지'), + ), + body: _isLoading + ? Center( + child: CircularProgressIndicator(), + ) + : Column( + children: [ + Row( + children: [ + SizedBox(height: 40), + Expanded( + child: Container( + margin: EdgeInsets.only(right: 20, left: 20), // 오른쪽 마진 추가 + height: 50, // 왼쪽 회색 박스의 높이 + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(10), + border: Border.all(color: Colors.black, width: 2), + color: Color.fromRGBO(200, 200, 200, 1.0), + ), + child: Center( + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Text('INTJ'), + Text( + '세종대왕', + style: TextStyle(fontSize: 15, fontWeight: FontWeight.bold), + ), + ], + ), + ), + ), + ), + Icon( + Icons.favorite, // 하트 모양 아이콘 + color: Colors.red, // 빨간색 + size: 50.0, // 아이콘 크기 + ), + Expanded( + child: Container( + margin: EdgeInsets.only(left: 20, right: 20), // 왼쪽 마진 추가 + height: 50, // 오른쪽 회색 박스의 높이 + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(10), + border: Border.all(color: Colors.black, width: 2), + color: Color.fromRGBO(200, 200, 200, 1.0), + ), + child: Center( + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Text('ENFJ'), + Text( + '최명헌 님', + style: TextStyle(fontSize: 15, fontWeight: FontWeight.bold), + ), + ], + ), + ), + ), + ), + ], + ), + SizedBox(height: 10), // 추가한 공간 + //HERE + Padding( + padding: EdgeInsets.symmetric(horizontal: 20.0), // 양 옆 마진을 조절하세요. + child: ClipRRect( + borderRadius: BorderRadius.circular(10), + child: Image.asset( + 'assets/images/favorate_bar.png', // 이미지 경로를 수정하세요. + fit: BoxFit.cover, + ), + ), + ), + Container( + margin: EdgeInsets.all(20), // 큰 회색 박스의 마진 설정 + height: 200, // 큰 회색 박스의 높이 설정 + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(10), + border: Border.all(color: Colors.black, width: 2), + color: Color.fromRGBO(200, 200, 200, 1.0), + ), + child: Column( + children: [ + // 상단 이미지와 텍스트 + Container( + width: double.infinity, // 리스트 너비를 상위 컨테이너의 너비와 같게 설정 + child: Row( + children: [ + Expanded( + flex: 1, // 이미지의 비율을 1로 설정 + child: Container( + margin: EdgeInsets.all(5), + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(10), + color: Color.fromRGBO(200, 200, 200, 1.0), + ), + child: ClipRRect( + borderRadius: BorderRadius.circular(10), + child: Image.asset( + 'assets/per_images/img1.jpeg', // 이미지 경로 + fit: BoxFit.cover, + ), + ), + ), + ), + Expanded( + flex: 2, // 텍스트의 비율을 3으로 설정 + child: Container( + margin: EdgeInsets.all(5), + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(10), + color: Color.fromRGBO(200, 200, 200, 1.0), + ), + child: Text( + '“고기는 씹을수록 맛이 난다. 그리고 책도 읽을수록 맛이 난다.”\n\nMBTI: ${people[0].mbti} \n출생일: ${people[0].birth_Date} \n기일: ${people[0].death_Date} \n시대: ${people[0].era}', + textAlign: TextAlign.left, + style: TextStyle(fontSize: 15, fontWeight: FontWeight.bold), + ), + ), + ), + ], + ), + ), + ], + ), + ), + // 세로로 된 리스트 (예시) + Expanded( + child: ListView.builder( + shrinkWrap: true, // 리스트 높이를 내용에 맞게 조절 + itemCount: 5, // 리스트 아이템 개수 + itemBuilder: (BuildContext context, int index) { + return Container( + width: double.infinity, // 리스트 아이템 너비를 상위 컨테이너의 너비와 같게 설정 + margin: EdgeInsets.symmetric(vertical: 5.0, horizontal: 20.0), + decoration: BoxDecoration( + border: Border.all(color: Colors.black, width: 2), + borderRadius: BorderRadius.circular(10), + color: Color.fromRGBO(200, 200, 200, 1.0), + ), + child: Row( + children: [ + Expanded( + flex: 1, // 이미지의 비율을 1로 설정 + child: Container( + margin: EdgeInsets.all(5), + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(10), + color: Color.fromRGBO(200, 200, 200, 1.0), + ), + child: ClipRRect( + borderRadius: BorderRadius.circular(10), + child: Image.asset( + 'assets/per_images/img${index+2}.jpeg', // 예시: 이미지 경로 + fit: BoxFit.cover, + ), + ), + ), + ), + Expanded( + flex: 4, // 텍스트의 비율을 3으로 설정 + child: Container( + margin: EdgeInsets.all(5), + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(10), + color: Color.fromRGBO(200, 200, 200, 1.0), + ), + child: Text( + '${people[index+1].name}\n\n출생일: ${people[index+1].birth_Date} \n기일: ${people[index+1].death_Date} \n시대: ${people[index+1].era}', + textAlign: TextAlign.left, + style: TextStyle(fontSize: 15, fontWeight: FontWeight.bold), + ), + + ), + ), + ], + ), + ); + }, + ), + ), + SizedBox(height: 20,), + // 버튼 + Align( + alignment: Alignment.bottomRight, + child: Padding( + padding: EdgeInsets.only(bottom: 80, right: 30), // 아래쪽과 오른쪽 여백 조절 + child: Container( + width: 100, // 버튼의 너비 설정 + height: 40, // 버튼의 높이 설정 + child: ElevatedButton( + onPressed: () { + Navigator.push( + context, + MaterialPageRoute(builder: (context) => DashBoard()), + ); + }, + style: ElevatedButton.styleFrom( + primary: Colors.grey, // 버튼 배경색 + ), + child: Text( + '인물사전', + style: TextStyle( + color: Colors.black,fontWeight: FontWeight.bold // 텍스트 색상을 빨간색으로 변경 + ), + ), + ), + ), + ), + ), + + + + ], + ), + ); + } +} diff --git a/lib/screens/site_detail.dart b/lib/screens/site_detail.dart index fe0ba01..b083d28 100644 --- a/lib/screens/site_detail.dart +++ b/lib/screens/site_detail.dart @@ -3,6 +3,7 @@ import 'dart:ui'; import 'package:chosungood/screens/calender_page.dart'; import 'package:flutter/material.dart'; import 'package:url_launcher/url_launcher.dart'; +import 'mypage.dart'; import 'sites.dart'; // HistoricSite 클래스를 import class SiteDetailPage extends StatelessWidget { @@ -81,10 +82,17 @@ class SiteDetailPage extends StatelessWidget { onPressed: () { // 두 번째 버튼 눌렀을 때 수행할 동작 추가 // 두 번째 버튼 눌렀을 때 KakaoMapPage로 이동하는 코드 + + Navigator.push( + context, + MaterialPageRoute(builder: (context) => MyPage()), + ); + /* Navigator.push( context, MaterialPageRoute(builder: (context) => CalendarPage()), ); + */ }, style: ElevatedButton.styleFrom( padding: EdgeInsets.symmetric( diff --git a/pubspec.yaml b/pubspec.yaml index e107189..c5fb8c0 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -67,6 +67,7 @@ flutter: - assets/per_images/ - assets/images/duguncho.png - assets/config/.env + - assets/images/favorate_bar.png # The following line ensures that the Material Icons font is # included with your application, so that you can use the icons in # the material Icons class.