Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

24-25-APP-Assignment-06 최다연 #1

Open
wants to merge 6 commits into
base: main
Choose a base branch
from

Conversation

choi-day
Copy link

@choi-day choi-day commented Nov 17, 2024

Description

goal.dart

  • Goal객체를 만들고 생성자로 초기화 시켰습니다
  • 객체를 map타입으로 변환하여 데이터베이스에 저장하는 toMap()메서드와 저장된 map타입 데이터를 goal객체로 변환하여 불러오는 fromMap()메서드를 작성했습니다

goal_database.dart

  • 싱글톤 패턴으로 데이터베이스를 생성하고 초기화 했습니다
  • _creatDB메서드에서 sql문법을 사용하여 데이터베이스를 만드는 코드를 작성하였습니다
  • addGoals에서는 goal인스턴스를 데이터베이스에 추가하는 코드를 작성하였습니다.
  • getGoals에서는 데이터베이스에 있는 데이터를 리스트 형태로 조회하는 코드를 작성하였습니다
  • deleteGoal에서 해당하는 id의 goal객체를 삭제하는 코드를 작성하였습니다
  • editGoal에서 해당하는 id의 goal객체를 수정하는 코드를 작성하였습니다
  • close메서드에서 데이터베이스를 닫아주었습니다

goal_app.dart

  • Goaldatabase객체의 database인스턴스와 goal객체를 담을 리스트를 선언하였습니다

  • database를 새로고침(?)하는 _loadGoals메서드를 작성하였습니다

  • _addGoal에서 showDialog를 사용하여 입력창을 띄웠습니다

  • _addGoal에서 TextFormField로 사용자에게서 입력을 받고 null이면 경고문을 띄우는 유효성 검사 코드를 작성하였습니다

  • _editGoal에서 _addGoal을 참고하여 화면에 보이는 Text일부를 수정하고 editGoal메서드를 이용하여 database를 수정하는 코드를 작성하였습니다

  • _myGoals 위젯을 외부에 정의하였고, ListView의 builder를 이용하여 goals 리스트를 화면에 띄웠습니다

  • _myGoals에서 IconButton을 이용하여 수정과 삭제 버튼을 만들었고 Row위젯으로 감싸 두 버튼을 가로로 배치하였습니다.

  • 지난번 코드 리뷰를 받고 TextStyle을 따로 상수로 선언하여 코드를 간결하게 수정하였습니다

  • 전체적으로 의미 없는 sizedBox는 삭제하고 간단한 위젯은 한줄로 작성하여 간결하게 수정하였습니다(이부분은 gpt의 도움을 조금 받았습니다...)

메인 화면 스크린샷 2024-11-19 오후 2 20 22
입력 전 화면 스크린샷 2024-11-19 오후 2 20 33
유효성 검사 화면 스크린샷 2024-11-19 오후 2 20 46
추가 완료 화면 스크린샷 2024-11-19 오후 2 21 01
수정 화면 스크린샷 2024-11-19 오후 2 25 52
수정 완료 화면 스크린샷 2024-11-19 오후 2 26 05

Important content

  • 객체, 인스턴스, 메서드 등 용어에 대한 부분이 헷갈려서 이번 pr을 작성하며 나름의 용어 정리를 해보았어요 혹시 틀린 표현이 있는지 봐주시면 합니다🙇‍♀️

Question

Reference

Copy link
Collaborator

@hyeminililo hyeminililo left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

인스턴스와 객체의 차이를 이해하신 것 같네요! 해당 프로젝트에서는 객체는 Goal이고 Goal을 이용해 만든게 인스턴스에요 :) DB의 전체적인 흐름은 이해하신 것 같네요 ! validation 부분은 아래 comment 읽어보시고, 궁금한 거 있으시면 언제든 comment 달아주세요 ~ 선택 과제까지 수고많으셨습니다 😊

decoration: const InputDecoration(hintText: "목표 제목"),
validator: (value) {
if (value == null || value.isEmpty) {
return '목표 제목';
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

목표 제목으로 하신 이유가 있나요 ?? 위 코드 목표를 입력하세요 이런 식으로 처리하면 요소 특성이랑 더 맞을 것 같아요:)

content: Form(
key: formKey,
child: TextFormField(
onChanged: (value) {
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

목표 수정 showDialog를 눌렀을 때, TextFormField의 요소인 initialValue를 변수로 지정한 title로 지정해주면, 적어둔 코드가 초기값으로 설정돼요 😊

const Text('@choi-day', style: style25),
const SizedBox(height: 15),
const Text('Introduce Me,,,', style: style25),
SizedBox(
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ListView를 SizeBox로 감싼 이유를 좋을 것 같아요 ! 만약 저라면 Text와 ListView 사이에 SizeBox를 둘 것 같아요 !

//데이터를 불러옴
factory Goal.fromMap(Map<String, dynamic> map){
return Goal(
id: map['id'] as int?,
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

타입 캐스팅한 것 좋은 것 같아요 👍

);
}

static const TextStyle style18 = TextStyle(fontSize: 18.0, color: Colors.grey);
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

const로 선언한 스타일들은 나중에 component와 같은 폴더를 만들어서 관리해도 좋아요 :)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants