키즈_프로젝트
4. 로그인화면 - 동의화면 만들기
깡 딱
2024. 11. 2. 20:58
728x90
코드 리팩토링 할 겸 동의화면에 대해서 말씀드리겠습니다.
동의화면 같은 경우에는
https://holybaits-modir.notion.site/132 a2688 a39 a8092 bdefcea510 e0 fd86
서비스 이용약관 | Notion
(상품, 서비스 등 이용 일반 회원용)
holybaits-modir.notion.site
이런 식으로 노션으로 일단은 만들어 놨습니다.
( 이 자료는 로펌을 참고해서 만들었습니다. 확실하지는 않고 흉내만 )
완성된 화면입니다.
먼저 저희가 쓸 내용들을 bool문으로 체크를 위해서 선언해 줍니다.
bool agreeToAllTerms = false; // 전체 동의
bool agreeToRequiredTerms1 = false; // (필수) 약관 동의
bool agreeToRequiredTerms2 = false; //(필수) 개인정보 수집 동의
bool agreeToRequiredTerms3 = false; //(필수) 전금 금융 거래 이용 약관 동의
bool agreeToSelectTerms = false; //(선택) 약관 동의
bool isButtonPressed = false; //다음 버튼
이제 동의 화면에서는 알아야 되는 게
버튼을 눌렀을 때 색을 변하게 만드는 메서드
또한 이 메서드를 눌렀을 때 전체동의나 다음버튼에 전달해 주기 위해서
_StatetoggleAgreement(); 도 같이 전달해 준다.
// (필수) 약관 동의 메서드
void _toggleTermsAgreement() {
setState(() {
agreeToRequiredTerms1 = !agreeToRequiredTerms1;
_StatetoggleAgreement();
});
}
//(필수) 개인정보 수집 동의 메서드
void _toggleTermsAgreement1() {
setState(() {
agreeToRequiredTerms2 = !agreeToRequiredTerms2;
_StatetoggleAgreement();
});
}
//(필수) 전금 금융 거래 이용 약관 동의 메서드
void _toggleTermsAgreement2() {
setState(() {
agreeToRequiredTerms3 = !agreeToRequiredTerms3;
_StatetoggleAgreement();
});
}
_StatetoggleAgreement()는 필수 3개를 눌렀을 때는 다음버튼과 전체 약관동의 색도 변하게 만들어야 된다.
//일정 조건이 참일때 버튼 활성화
void _StatetoggleAgreement() {
setState(() {
bool allAgreed = agreeToRequiredTerms1 &&
agreeToRequiredTerms2 &&
agreeToRequiredTerms3;
if (allAgreed) {
isButtonPressed = true;
agreeToAllTerms = true;
} else {
isButtonPressed = false;
agreeToAllTerms = false;
}
});
}
모든 값이 ture이 되어을 때 전체 동의에 불이 켜져야 되고 다음버튼이 활성화 되게 전체 동의 메서드도 하나 만들어준다.
// 전체동의 처리 메서드
void _toggleAgreement() {
setState(() {
agreeToAllTerms = !agreeToAllTerms;
if (agreeToAllTerms) {
agreeToRequiredTerms1 = true;
agreeToRequiredTerms2 = true;
agreeToRequiredTerms3 = true;
agreeToSelectTerms = true;
isButtonPressed = true;
} else {
agreeToRequiredTerms1 = false;
agreeToRequiredTerms2 = false;
agreeToRequiredTerms3 = false;
agreeToSelectTerms = false;
isButtonPressed = false;
}
});
}
이렇게 되면 메서드는 완성했다. ui에서는 어떻게 연결해야 될까
위젯으로 메서드를 하나 만들어준다.
우리는 메서드들이 많기 때문에 동의, 텍스트 등 다양한 자료들을 전달해 준다.
Widget AgreementButton({
required bool isAgreed,
required String text,
required String checkedImage,
required String uncheckedImage,
required VoidCallback onTap,
}) {
return Expanded(
child: InkWell(
onTap: onTap,
child: Container(
padding: EdgeInsets.symmetric(vertical: 10, horizontal: 12),
height: 48,
child: Row(
children: [
Container(
width: 28,
height: 28,
decoration: BoxDecoration(
image: DecorationImage(
image: AssetImage(isAgreed ? checkedImage : uncheckedImage),
),
),
),
SizedBox(width: 8),
Text(
text,
textAlign: TextAlign.center,
style: TextStyle(
color: isAgreed ? Color(0xFF3D3D3D) : Color(0xFF888888),
fontSize: 14,
fontFamily: 'Pretendard',
fontWeight: FontWeight.w400,
height: 1.0,
letterSpacing: -0.35,
),
),
],
),
),
),
);
}
실제 ui 위젯 안에 들어갈 때는
AgreementButton(
isAgreed: agreeToRequiredTerms1,
text: '(필수) 이용 약관 동의',
checkedImage: 'assets/image/Onbluecheck_icon.png',
uncheckedImage: 'assets/image/check_icon.png',
onTap: () {
_StatetoggleAgreement(); // 상태 변경 함수 호출
setState(() {
_toggleTermsAgreement(); // 동의 상태 변경
});
},
),
이런 식으로 전달하면
이러한 위젯이 만들어진다.
이렇게 4개를 만들면 동의 화면은 끝이 난다!
728x90