Flutter (10) 썸네일형 리스트형 app-ads.txt 파일 호스팅하기 (feat. firebase) 1. Windows에서 Flutter에 Firebase 추가하기를 참고해서 CLI 툴 설치2. Firebase 콘솔에서 앱 선택 후 "Hosting" > 시작하기 클릭3. public으로 호스팅할 폴더를 생성한다. (e.g. C:\Users\me\StudioProjects\public_for_hosting_ads )4. CLI에서 해당 폴더로 이동 후 firebase init 수행5. 프롬프트에 대해서 다음과 같이 선택? Are you ready to proceed? Yes? Which Firebase features do you want to set up for this directory? Press Space to select features, then Enter toconfirm your choic.. Windows에서 Flutter에 Firebase 추가하기 참고 문서 : Firebase CLI reference 1. nvm 설치 (이미 설치된 경우엔 생략)아래 깃헙을 참고해서 `nvm-setup.exe` 설치 후 실행GitHub - coreybutler/nvm-windows GitHub - coreybutler/nvm-windows: A node.js version management utility for Windows. Ironically written in Go.A node.js version management utility for Windows. Ironically written in Go. - coreybutler/nvm-windowsgithub.com 2. CMD에서 `nvm install 23` 실행3. `npm install -g fireba.. Flutter 광고 로딩 실패 시 재시도 로직 - Exponential Backoff, 점진적 대기 시간 증가 적용하기 광고 로딩 실패 시 재시도 로직 유의점1. 미리 로딩하기 → 로딩으로 인한 지연 시간을 최소화 하기 위해 미리 로딩한다.2. 무한 반복 시도는 피해야 한다 → 네트워크 및 자원을 절약하기 위해서 최대 재시도 횟수를 도입하는 것이 권장됨.3. 너무 자주 재시도하지 않기 → 인벤토리에 광고가 없어서 광고가 로드되지 않는 경우, 단 몇 초 차이로 광고가 로드 되는 경우는 매우 드물다. 점진적 대기 시간 증가(Exponential Backoff)란?재시도 간격을 1초, 2초, 4초 등으로 점점 늘려가는 방법을 말한다. 점진적 대기 시간 증가(Exponential Backoff)의 장점과 단점장점 : 광고가 없는 경우 자원 절약→ 새벽 3시와 같이 광고가 없는 경우에 너무 자주 재시도 하지.. 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.. 이전 1 2 다음