[Flutter][Widget] CustomPaint로 나만의 위젯 만들기
Flutter/Widget2024. 4. 8. 20:35[Flutter][Widget] CustomPaint로 나만의 위젯 만들기

개요 Flutter에서는 상당히 많은 기본 위젯들을 제공해준다. Container, Column, Row, Stack, ListView 등등... 많은 기본 위젯들을 제공해준다. 기본 위젯들을 잘 조합하여 새로운 위젯을 만들 수 있지만, 때로는 기본 위젯의 조합으로도 만들 수 없는 위젯들을 만들어야할 때가 있다. ▼ 이럴 때는 우리가 따로 정의하여 사용을 해야하는데, 이를 도와주는 것이 `CustomPaint`다. CustomPaint를 통해 직접 위젯의 모양을 정의하여 새로운 형태의 위젯을 만들 수 있다. 들어가기 앞서 : 기본적인 좌표계에 대해서 들어가기 앞서 좌표계에 대해 알아야 한다. 이는 `CustomPaint`에서만 사용되는 것은 아니고 앱 전반적으로 다 사용되는 내용이다. 우리가 배웠던 좌표..

[Flutter] 패키지 사용법
Flutter/방법론, 이론2024. 4. 1. 13:39[Flutter] 패키지 사용법

개요 개발을 하다보면 기본적으로 제공하는 함수나 기능들 외의 기능들이 필요할 때가 많다. 스스로, 혹은 개발 팀에서 이를 직접 구현할 수 있고, 그러기로 결정이 났다면 다행이지만, 그럴 여유가 없어서 그 기능을 구현할 수 없을 때가 있다. 그럴 때는 보통 라이브러리를 받아와서 해결한다. ▼ Flutter는 이를 패키지라고 부르며, 빠른 개발을 위해서라면 패키지를 사용하는 것은 필수다. 패키지 혹은 플러그인이라고도 부르는데 엄연히 따지자면 패키지가 조금 더 큰 개념이다. 굳이 구별을 하자면 Dart코드로만 이루어진 것을 패키지라고 하고, JAVA, Swift, Kotlin과 같은 다른 언어를 포함하고 있는 것을 플러그인이라고 한다. 어쨌든 이번 포스트에서는 패키지 사용법에 대해 알아볼 것이다. 패키지 검색..

[Flutter][Widget] Row, Column 위젯
Flutter/Widget2024. 3. 24. 18:57[Flutter][Widget] Row, Column 위젯

개요 Flutter에서 하나의 위젯을 배치하는 것은 굉장히 쉽다. 오버라이드된 `build` 메소드의 `return`에 위젯 클래스를 반환해주면 위젯을 쉽게 렌더링할 수 있다. (물론 그 과정은 굉장히 추상적이고 복잡하겠지만...) "그렇다면 여러 개의 위젯을 배치하고 싶을 때는 어떻게 해야하지?" `return` 에는 하나의 위젯만 반환시킬 수 있고, 반환 타입마저도 `List`이 아니라서 여러 개의 위젯을 반환하는 것은 사실상 불가능하다. "그럼 뭐 불가능하다는거야 뭐야?" 불가능했다면 Flutter는 이 세상에 나오지 못햇을 것이다... 당연히 가능하며, 이를 도와주는 것은 Multichild-Layout Widget들이다. Multichild-Layout Widget에는 `Row`, `Column..

[Flutter][Widget] Container 위젯 그리고 Container의 크기 설정
Flutter/Widget2024. 3. 20. 22:55[Flutter][Widget] Container 위젯 그리고 Container의 크기 설정

개요 특정 영역에 위젯을 배치할 때 그냥 위젯을 배치하는 것이 아니라 어느 영역을 설정한 후 위젯을 배치한다. 그럴 때 Flutter에서는 단일 위젯을 배치할 때 `Container` 위젯과 `SizedBox` 위젯을 사용하여 그 영역을 설정하곤 한다. 이번 포스트에서는 `Container` 위젯에 대해 알아볼 것이다. Container Container란? `Container`의 의미는 용기, 담을 수 있는 무언가라는 의미로 정석적인 의미와 상당히 사용하는게 비슷한 위젯이다. UI요소를 감싸고, 다양한 형태를 취할 수 있는 위젯이다. 위의 설명은 `SizedBox`와 굉장히 비슷한데, `SizedBox`와의 결정적인 차이점은 `Container`위젯은 그 자체를 꾸밀 수 있다는 것이다. 사용예시 Con..

[Flutter][Widget] Text 위젯
Flutter/Widget2024. 3. 19. 17:46[Flutter][Widget] Text 위젯

개요 글자를 보여준다는 것은 프로그램의 가장 기초적인 부분이다. Flutter에서는 Text 라는 위젯을 통해 이를 보여준다. Text 외의 다른 위젯도 있지만, 이번 포스트에서는 가장 기초적인 위젯인 Text위젯을 볼 것이다. Text란? `Text`는 이름 그대로 문자를 보여주는 위젯으로 원하는 문자열을 화면에 그려준다. Text 사용예시 Text("안녕하세요 노근입니다.") `Text` 위젯은 위와 같이 간단하게 사용할 수 있다. `Text("원하는 문자열")`의 형태로 가볍게 사용할 수 있다. ▼ style 프로퍼티 (TextStyle) "근데 폰트 크기가 더 크거나, 색이 달랐으면 좋겠는데?" 그럴 때는 `style` 프로퍼티에 `TextStyle` 에 필요한 프로퍼티들을 채운뒤 넣어주면 된다...

[Flutter][Widget] Step Indicator 구현
Flutter/Widget2024. 2. 29. 17:03[Flutter][Widget] Step Indicator 구현

개요 : Step Slider가 있는데 왜 구현한거지? 만들게 된 계기 프로그램에서 예약 페이지를 개발할 때, 디자이너의 의도가 아래와 같았다. ▼ 인디케이터가 5분 단위로 이동해야하며, 아래 선택된 시간만큼 인디케이터 뒷부분의 공간을 색칠해줘야한다. 여기서 가장 중요한 것은 5분 단위로 끊어서 이동해야한다는 것이다. 예약은 5분 단위로 진행되기 때문에 끊어서 이동하지 않으면 매 분, 매 초단위로 예약할 수 있다고 유저가 혼동할 수 있기 때문이다. 그렇기에 5분이라는 Step을 두어 구현을 해야하는 상황이 발생한 것이다. 근데 왜 slider를 수정하지 않은것? Flutter에서 기본적으로 Slider 위젯을 제공해준다. ▼ Slider class - material library - Dart API A..

[Flutter][Error] Unhandled Exception: MissingPluginException
Flutter/Error2024. 2. 28. 22:55[Flutter][Error] Unhandled Exception: MissingPluginException

발단 이것저것 테스트 해보며 필요한 부분을 만들던 도중, 기기에서 사진을 불러오는 기능이 필요했다. ImagePicker를 사용하면 쉽게 해결이 되는데(쉽다고는 했지만 iOS에서 권한 설정이 필요해서 시간이 좀 걸리긴 했다...) 패키지를 추가하고 나니 `MissingPulginException`이라는 에러 메세지가 나왔다. 해결 해결은 굉장히 쉬웠다. 앱 디버깅을 종료하고 다시 빌드를 하면 해결이 된다. 처음 이 에러를 마주했을 때는 뭐가 문제인지 몰라서 import를 잘못한건지, 아니면 패키지에서 사용하는 클래스와 같은 이름을 사용하는 클래스가 있는건지 계속 찾아 헤맸다. 스택오버플로우와 다른 글들을 찾아보고나서 너무나도 쉽게 해결이 되어 조금은 허무했지만, 마주했을 당시에는 상당히 당황스럽긴 했다...

[Flutter][Error] Firebase Realtime DB 이름 규칙 오류
Flutter/Error2024. 2. 24. 19:45[Flutter][Error] Firebase Realtime DB 이름 규칙 오류

발단 실시간 DB로 옮기고 DB구조를 어느정도 정한 후에 테스트를 위해 더미 데이터를 넣어보았다. 현 프로젝트에는 DB구조가 아래와 같다. String todoid; DateTime date; String title; List repeat; String user; String creator; bool alarm; String description; bool complete; 이때 todoid는 현재 DateTime으로 나온 값을 String으로 변환 시킨 값을 사용한다. 번호나 일정 규칙이 있는 값을 id 삼아 사용하려고 했는데, 그렇게 되면 추가로 생각해야할게 많아져서 단순한 프로젝트인 만큼 단순하게 잡았다. 그런데 더미데이터를 넣는 함수를 실행시키자 시뮬레이터 내부에서 앱이 바로 종료되어버렸다. 보통..

[Flutter][Error] CocoaPod Dependency 오류
Flutter/Error2024. 2. 16. 21:04[Flutter][Error] CocoaPod Dependency 오류

개요 프로젝트에서 사용하는 DB로 Firebase firestore를 사용하려고 했다. 사용하기 간편하고 팀에 백엔드가 없는 상황에서 가장 사용하기 쉽기에 firestore를 사용할 계획이었다. 그러나 플랫폼의 특징을 띠고 있는 현재의 프로젝트 특성상 종속성이 없는 firestore는 문제가 있다고 판단이 되었다. 그리고 아래와 같이 프로젝트 방향성도 바뀌게 되면서 DB를 바꿔야 하는 상황이 되어버렸다. 바뀐 프로젝트 방향성 더보기 노인의 todos를 추가하자 장점) 1. 로그인 할때 노인의 정보를 가져올때 투두 정보를 전부 가져올 수 있다 2. 보호자가 구독중인 노인들 투두 정보를 가져올 때, 정보를 같이 가져오지 못해서 노인의 정보를 가져오려면 한 명 한명 일일이 쿼리를 또 날려야한다. 합치면 한 번..

[Flutter][Package] ScreenUtil 패키지
Flutter/Widget2024. 2. 15. 15:02[Flutter][Package] ScreenUtil 패키지

개요 앱 개발을 하다보면 해상도 대응이 상당히 까다롭다. 디자이너가 준 화면을 구현하고, 실제 기기에서 보면 뭔가 이상할 때가 많다. 이는 해상도가 맞지 않아, UI 배치가 조금씩 틀어지면서 생기는 문제다. 각 기기마다 해상도가 다르기 때문에 모든 기기에 맞게 코드를 작성하는 것은 어렵다. 이를 위해 iOS에선 Auto Layout과 같은 방법론이 등장했다. 하지만 Flutter에서는 어떨까? Flutter에서도 padding을 사용하여 CSS나 iOS와 같이 해상도 대응을 할 수 있다. 일반적으로는 이게 정석인데, 약간의 꼼수를 사용할 수 있다. 바로 ScreenUtil 패키지를 이용하는 것이다. ScreenUtil 이란? ScreenUtil 패키지는 해상도를 자동 대응해주는 패키지이다. 기준 화면을 ..

image