진행 중인 사이드프로젝트에 참여하게되어서 클론을 받았으나 위와같은 firebase_option 이 임포트가 안된다는 에러가 발생했다. 이러한 경우 에러발생원인이 크게 두 가지인데 1. 정말로 yaml 파일에서 firebase_core 패키지를 넣어주지 않았거나2. 플러터 프로젝트를 파이어베이스와 연동하지 않았거나. (Flutterfire Configure 작업 필요) 이미 진행되고 있는 프로젝트를 클론받았을 때 위와같은 에러가 뜬다면 후자일 가능성이 높다. 1번의 경우는 그냥 yaml에다 패키지 넣어주면 되고 2번은 후술할 내용에 따라 에러를 해결할 수 있다. 💡 flutterfire configure 작업이란?flutterfire configure 작업은 FlutterFire CLI를 사용하여 Flu..
Flutter
Error: The plugin "cloud_firestore" requires a higher minimum iOS deployment version than your application is targeting. To build, increase your application's deployment target to at least 13.0 as described at https://docs.flutter.dev/deployment/ios 에러내용은 cloud firestore 패키지는 최소 iOS 13을 지원하는데 지금 너의 프로젝트는 iOS12로 타겟팅되어있어~ 라는 내용이다. VSCode에서 새로운 프로젝트를 만들면 디폴트값으로 iOS12로 타겟팅되기 때문에 13이상으로 올려주어야한다. 먼저..
답변 요약// Key Pathlet person = Person(name: "Alice", age: 25)let nameKeyPath = \Person.name // Person 객체의 `name` 프로퍼티에 대한 Key Pathlet ageKeyPath = \Person.age // Person 객체의 `age` 프로퍼티에 대한 Key Path 상수나 변수에 함수를 참조로 할당할 수 있는 것처럼 프로퍼티의 위치도 참조로 할당할 수 있습니다. 프로퍼티에 직접 접근해서 값을 꺼내오는게 아니라 키패스를 사용하면 간접적으로 접근하여 특정 타입의 어떤 프로퍼티 값을 가리켜야 할지 미리 지정해두고 사용할 수 있습니다. 이를 다르게 말한다면 키패스는 프로퍼티에 대한 접근을 추상화한 타입입니다.부가 설명/..
답변 요약Key-Value Observing 이란 특정 키값의 변화를 감지하는 기능으로 객체 프로퍼티 변경사항을 다른 객체에게 알릴 수 있는 코코아 프레임워크에 내장되어 있는 패턴입니다.부가 설명KVC(Key-Value Coding)는 NSKeyValueCoding 프로토콜에 의해 동작한다. NSKeyValueCoding 의 특징은 컴파일 타임에 접근하는 것이 아닌 문자열을 사용하여 런타임에 객체의 프로퍼티에 접근하거나 값을 설정한다는 것이다. Key-value coding은 KVO(Key Value Observing), 코코아 바인딩, 코어 데이터 등 코코아 프레임워크에 자주 적용되는 원리이다. 또한 NSObject를 채택하고 있는 친구는 모두 NSKeyValueCoding 프로토콜을 채택하고 있다고..
Statless 위젯의 경우Stateless 위젯의 경우 위와 같이 같은 타입이라도 다른 데이터로 인식하지만 이러한 위젯트리를 정말로 그리는 Element Tree 에서는 같은 타입은 모두 똑같이 인식해버린다. 만약 위젯트리에서 Red와 Blue의 context를 바꾸더라도 둘은 같은 타입이기 때문에 Element Tree는 이를 전혀 알 수 없다.Stateful 위젯의 경우Stateful 위젯의 경우 State는 위젯이 가지고 있는 것이 아닌 Element Tree가 소유하고 있다. 만약 위젯트리에서 Red, Blue 가 바뀐다면 Element Tree 에서는 Red WidgetTree에 Blue State를 넣게 된다. 이렇게 같은 타입이여도 Element Tree에서 다른 위젯으로 인식할 수 있..
네이버 블로그/velog 에서 작성했던 내용들을 티스토리로 통합중입니다 :) 동시성 프로그래밍으로 프로그램 구성하기메인스레드의 경우 UI관련 사용자와 직접 상호작용하는 작업을 처리하는데, 데이터변환, 이미지 처리를 메인스레드에서 전부 처리할 경우 약간의 버벅임 문제가 발생한다.메인스레드의 과중화된 업무를 방지하기위해 나온것이 바로 Concurrency(동시성)이다. 동시성 프로그래밍은 여러개의 스레드를 사용함으로써 동시작업을 가능케한다. 하지만 단점도 있는데 바로 thread safety를 유지하기 어렵다는 것이다. 다른 스레드가 작업하는걸 순차적으로 가져와서 지키기가 어려워진다.동시성 환경에서 thread safety를 유지하기 위한 노력으로 애플은 GCD 라이브러리를 만들어서 제공하고 있다.Dispa..
답변요약routes와 onGenerateRoute는 모두 Flutter에서 화면 전환을 관리하기 위한 방법이지만 사용 방법과 유연성에서 차이가 있습니다. routes는 간단한 네비게이션을 설정할 때 사용됩니다. 이는 애플리케이션 내에서 사용할 모든 라우트(경로)를 미리 정의하는 방법입니다. routes 매핑은 애플리케이션이 시작될 때 설정되며, 각 경로에 대해 어떤 위젯을 표시할지 코드를 작성합니다 onGenerateRoute는 더 복잡한 네비게이션 로직을 처리할 때 사용됩니다. 이 메서드는 라우트가 요청될 때 호출되며, 요청된 라우트에 따라 동적으로 위젯을 생성하고 반환할 수 있습니다. 주로 라우트에 데이터 주입을 하거나, 특정 조건에 따라 다른 페이지를 표시해야 할 때 유용합니다 정리하자면 rout..
데이터 바인딩이란?클린아키텍쳐에서 마틴 파울러가 말하는 GUI프로그래밍The View is the humble object that is hard to test. The code in this obejct is kep as simple as possible.The presenter is the testable object. Its job is to accept data from the application and format it for presentation so thaat the View can simply move it to the screen.험블오브젝트 패턴에 의해 GUI는 두 개로 나뉜다 바로 뷰(구체적 구현사항)와 프레젠터(테스터블한 행동들)이다.Anything and everything t..
Rx를 실제 사용한다고 생각해보자. Rx를 사용할 때 순서를 생각해보면 아래와 같이 크게 3가지 과정을 거칠것이다. 1. 먼저 Observable을 만든다.2. 원하는 연산자를 사용한다.3. 구독해서 사용한다. 그렇다면 위에서 반드시 만나는 문제는 어떤 Observable 과 Operator 를 사용할 것이냐이다. 이때 알아야할 지식이 바로 Hot Observable & Cold Observable 개념이다. 두 옵저버블의 특성을 알아보고 실전에서 어떻게 쓰이는지 살펴보자 Unicast vs Muticast먼저 Observable에는 개별적으로 스트림을 던지는 녀석과 던지는 스트림을 공유하는 녀석이 있다. 전자를 Unicast로, 후자인 multicast라고 부르며 Unicast 를 하는 대표적인 예로..
플러터를 하다보면 가장 많이 보는 안내창이 바로 위젯에 const 키워드를 넣으라는 문구일 것이다. 그렇다면 왜 IDE에서 제발 const를 넣으라고 울부짖는걸까? Flutter 위젯에 const를 붙여야하는 이유는 바로 메모리 최적화 때문이다. const없이 위젯을 선언하게 되면 새로운 중복된 위젯 메모리공간을 사용하게 되기 때문이다. 단순히 메모리 최적화뿐만 아니라원하는 위젯 메모리를 바라보게 해야할 때 위젯이 중복되버리면 어느 위젯 메모리를 포인팅해주어야하는지 상당히 난감해지므로 왠만하면 위젯 앞에 const를 붙이자. 주의할점으로는 위젯 앞에 const를 붙인다는 것 자체가 해당 위젯은 변하지 않는다는 것을 선언하는 것이다. const 자체가 컴파일 상수임을 의미하기 때문이다. Stateful..