궁금증 Flutter에서 영구적으로 기기에 데이터를 저장하기 위해 SharedPreferences 패키지를 사용한다. SharedPreferences를 사용할 때 인스턴스를 따로 생성하지 않고, getInstance()를 사용하는데 그 이유가 궁금했다. 해답 그 이유는 Singleton 디자인 패턴을 따르기 때문이었다. singleton 패턴 singleton은 '단독 개체', '독신자'라는 뜻 말고도 '정확히 하나의 요소만 갖는 집합' 등의 의미가 있다. singleton 패턴은 객체의 생성과 관련된 패턴으로서 특정 클래스의 객체가 오직 한 개만 존재하 terms.naver.com 싱글톤 디자인 패턴 : "특정 클래스의 객체가 오직 한 개만 존재하도록 보장한다. 즉 클래스의 객체를 하나로 제한한다." ..
상황 AlertDialog에서 submit버튼을 누르면 pop 되면서 return 값이 반환되도록 코드를 짰다. 원하는 대로, submit 버튼을 누르면 pop 되면서 return 값도 잘 반환되었다. 문제 나는 상기 코드처럼 showDialog의 반환값을 기존 변수에 저장을 해주도록하였는데, 내가 의도한대로 submit 버튼을 누를 때는 반환값이 제대로 넘어왔지만, AlertDialog의 외부 영역을 클릭했을 시에는 당연하게도 return값이 넘어오지 않아 null 에러가 발생하였다. cf) AlertDialog는 Dialog 외부 영역을 클릭하면 pop된다. 해결 외부영역을 눌러서 pop될 때는 따로 변경사항이 저장되지 않는 것이 맞기 때문에, 이로 인해 null값이 발생하면 그냥 기존값 그대로 두도..
로그인 기능 로직 앱 실행 => Flutter Secure Storage 확인 => - If (토큰 존재) => 토큰 검증 => 로그인 성공 - else if(토큰 없음) => 로그인 시도 => 로그인 성공 => 토큰 발행 => Flutter Secure Storage에 토큰 저장. Flutter Secure Storage 사용 이유 일반적으로 기기에 영구 데이터를 저장하려고 할 때 SharedPreferences를 사용한다. 하지만, 유저의 로그인 관련된 정보는 민감한 정보이기 때문에 좀 더 안전한 저장방법으로 Flutter Secure Storage 선택. - iOS에서는 keychain이 - android에서는 KeyStore가 사용되어 안전하다. JWT 사용이유 모바일 앱 개발 할 때 일반적으로 ..
변수 함수나 메소드 지역번수 안에서는 var를 사용하고, 보통 클래스 등 다른 곳에선 명시해줘. Dynamic 여러가지 타입을 가질 때 쓴다. 걍 js에서 var 같은거. dart의 var와는 다르다. dart의 var는 타입 변경 불가 null safety null을 참조할 수 없게 하는거. null 참조하면 런타임 에러 생김. 그렇기에 컴파일 에러로 처리해줘야해. ? => optional null이 되게 할 수도 있다. 단축해서 null이 아닐 때 처리를 할 수 있어. nico?.isNotEmpty; 하면 null 아닐 때만 처리해줌. final js의 const와 같음.바뀌지 않는 값. 타입 생략하고 가능. ex) final nico = "name"; late late은 final이나 var 앞에서..
문제 : url_laucher를 dependencies에 추가해 준 후, 또 무한로딩 발생 => gradle clean build 실행 => "FAILURE: Build failed with an exception." 발생 => 세부 내용 : * What went wrong: Could not determine the dependencies of task ':url_launcher_android:test'. > Could not create task ':url_launcher_android:testDebugUnitTest'. > this and base files have different roots: 해결 : 터미널에서 > flutter pub cache repair 잘 해결 되었다.
문제 : 안드로이드 에뮬레이터에서 플러터 앱을 실행시키려고 하는데 Running Gradle task 'assembleDebug'... " 에서 멈추고 더이상 진행이 되지 않았다. 해결 : 스택오버플로우에 올라와 있는 답변을 통해 간단히 해결하였다. 참고 : https://stackoverflow.com/questions/59516408/flutter-app-stuck-at-running-gradle-task-assembledebug Open your flutter Project directory. Change directory to android directory in your flutter project directory cd android clean gradle ./gradlew clean Buil..