본문 바로가기

Flutter

(7)
Flutter 앱 서명하는 법 Keystore에 대한 이해keystore는 여러 앱에 재사용이 가능.재사용하기 위해서는 jks 파일과, keystore의 두 가지 비밀번호를 알아야만 함.만약 정보를 잃어버린 경우 복구가 불가능하며, 이전에 출시하였던 앱의 android/key.properties에 다음과 같은 내용이 있어 재사용이 가능함.storePassword=keyPassword=keyAlias=upload storeFile=C:\\upload-keystore.jksjks 파일을 앱 내부에 놓고 앱 서명을 하는 것은 심각한 보안상의 이슈가 있으므로 앱 외부에 놓고 서명해야 함. Keystore가 이미 있는 경우 앱 서명하는 법 1. project/android/key.properties 파일 생성2. 파일의 내용은 아래 참고sto..
setState() or markNeedsBuild() called during build 에러 원인과 해결 `setState() or markNeedsBuild() called during build` 에러의 원인정진규 Software Engineer 노션에 따르면 마치 Null Pointer Exception과 같은 광범위한 에러이다. 따라서 에러가 발생하는 시점에 관한 코드를 자세히 살펴보는 것이 좋다. 에러의 원인은 말 그대로 UI를 이미 빌드하고 있는데 해당 UI가 구독하고 있는 state에 변경이 일어나서 또 변경하게 생겼다는 것이다.    `setState() or markNeedsBuild() called during build` 에러 원인 분석나의 경우에는 TestPage에 진입을 시도할 때마다 해당 에러가 발생하였다. 따라서 TestPage를 살펴보았다. TestPage는 TestState의 ..
Consider canceling any active work during "dispose" or using the "mounted" getter to determine if the State is still active. 에러 원인과 해결 방법 기능 설명위 페이지는 `TestPage`이다. 들리는 단어와 일치하는 이미지를 클릭하면 되는 페이지이다. 오디오는 5초마다 한 번씩 재생되어야 하므로 `Timer`와 `AudioPlayer`가 필요하다. 두 객체는 `TestState`에서 관리된다.   증상문제는 다음과 같이 뒤로가기 버튼을 눌렀을 때 오디오를 강제로 종료하는 과정에서 발생하였다. `Navigator`에서 `pop` 되면서 TestPage가 `dispose` 될 때 `Timer`와 `AudioPlayer`를 삭제하려고 시도하자 `Consider canceling any active work during "dispose" or using the "mounted" getter to determine if the State is still a..
Flutter UI와 State의 분리 - @initState와 Callback 함수 사용 페이지 이동에서 UI와 State의 역할분담UI : 어느 페이지로 이동해야 하는지 관리State : 페이지 이동 시점  관심사 분리의 장점1. 누가 무엇을 담당하는지 명확하면 유지보수가 쉬움2. 서로 직접 의존하지 않음으로써 재사용이 가능함 (e.g. TestState가 Navigator를 직접 호출하면 TestState를 페이지 전환 없이 사용할 수 없어짐)3. TestState 내부에서 Navigator를 직접 호출하면 UI 없이 단위테스트가 어려움  페이지 이동 시나리오 예시퀴즈 기능을 구현하기 위한 UI는 `TestPage`이고, 퀴즈 관련 상태 관리는 `TestState`라는 클래스가 한다. class TestState extends ChangeNotifier { (...생략...) void..
Unbounded height에 대한 이해 `Unbounded height` 혹은 `hasSize` 관련 에러 메시지 Unbounded height과 관련한 오류를 flutter 초보로써 가장 많이 겪고 있다. 에러 메시지는 다음과 같다.RenderBox was not laid out: RenderDecoratedBox#ed022 relayoutBoundary=up4'package:flutter/src/rendering/box.dart': Failed assertion: line 1965 pos 12: 'hasSize'   `Unbounded height` 혹은 `hasSize` 관련 에러 특징Unbounded height과 관련된 에러는 기본적으로 부모에게 높이의 제한이 없는데 자식이 부모의 높이에 맞게 늘어나려고 할 때 발생한다.    `Un..
새로운 flutter 프로젝트 생성하는 법 github에서 새로운 프로젝트를 만든다.프로젝트명은 snake_case로한다.라이선스는 안드로이드 프로젝트인 경우에 대부분 Apache Liscence 2.0이라고 한다.안드로이드 스튜디오에서 import from version control터미널에서 `flutter create [project_name]` 명령어를 수행main.dart 파일을 열어서 add dart support 클릭main.dart 우클릭 후 `run`
Dart, Flutter, Android Studio 개발 환경 구축 💡 코딩 애플 “쉬운 플러터 0강” 참고 https://docs.flutter.dev/release/archive?tab=windows 에서 3.13.9 다운로드. (stable 버전이 3.19.0이지만, 그럼에도 참고할 레퍼런스가 더 많고 프로그램이 더 안정적인 구 버전을 선택, a.b.c에서 c는 보통 버그 개선으로 올리는 버전으로 제일 큰 숫자로 고르는 게 나음)찾기 좋은 곳에 압축을 풀기 (나중에 sdk의 bin 폴더의 경로를 환경변수에 등록해야 하므로 위치를 기억해야 한다. )주의 : 윈도우 사용자 이름은 영어여야 함.윈도우 사용자 이름이 한글이면 환경변수 등록 시 오류가 발생하므로 영어로된 사용자를 새로 만드는 것이 낫다. 사용자 이름을 변경하는 것은 까다로움.Android Studio는 버..