지금 회사에서 플러터를 거의 마무리하면서, 내가 토이 프로젝트를 하지 않는 이상 이제 플러터와는 살짝 멀어지면서, 네이티브에 더 집중할 것으로 예상이 된다. 오늘은 이전 글이었던, 2021.10.04 - [Programing/Android Studio With Kotlin] - flutter/dart /JSON과 직렬화 api 서버통신 자동으로 만들기 / retrofit, dio, retrofit_generator, build_runner, json_serializable /TIL # 64 flutter/dart /JSON과 직렬화 api 서버통신 자동으로 만들기 / retrofit, dio, retrofit_generator, build_runner, json_ 오늘은 api 서버통신에 대한 글을 작성..
여느 떄와 같이 플러터 작업을 하던 중에 저런 오류가 떴다. 일시적인 오류로 디바이스를 찾지 못하는 이유인 것 같아서, 구글링을 해보니 해결법은 생각보다 간단했다. 아이폰 시뮬레이터에 경우에는 기존 바탕화면에 설치되었던 앱을 삭제하고, usb 포트를 뽑고 다시 연결 후 앱을 빌드하면 정상 빌드가 되고, 안드로이드 같은 경우는 Tools -> AVD Manager로 들어가 해당 안드로이드 기기를 Wipe Data(데이터 초기화) 해주고, 다시 재빌드를 해보면 정상 작동하는 것을 알 수 있다. 끝!
예전에도 이와 비슷한 글을 올린 적이 있다. 2021.07.27 - [Programing/Android Studio With Flutter(Dart)] - Flutter/Dart 리스트 슬라이드 로딩 구현 SmartRefresher 사용법 / Refresh 새로고침 구현 하기 TIL # 47 Flutter/Dart 리스트 슬라이드 로딩 구현 SmartRefresher 사용법 / Refresh 새로고침 구현 하기 TIL # 47 요즘 뜻대로 코드가 잘 짜여서 기분이 좋다. 오늘은 회사앱에도 적용 SmartRefresher이라는 패키지에 대해서 소개해 볼까 한다. https://pub.dev/packages/pull_to_refresh/install pull_to_refresh | Flutter Pa.. d..
이 글은 코딩 팩토리님의 equatable 강의를 바탕으로 참고했습니다. 이제 회사에서 새로운 앱을 만들기 앞서, 필요한 플러터 지식을 쌓기 위해 고전해야겠다고 생각이 들어 필요할 것 같은 플러그인을 찾고 있는 중이다. 그중에 Formz라는 로그인 기능 구현 시 유용한 플러그인을 발견하게 되었는데, 같이 사용할 수 있는 Equatable이라는 플러그인을 알게 되었다. Formz를 배우기 앞서 Equatable에 대한 개념을 잡고 가고자 한다. 객체의 인스턴스 우선 인스턴스에 대해 알아볼 필요가 있다. 객체의 인스턴스에 대한 개념은 지난 싱글톤 글에 대해서 설명한 적이 있다. 2021.07.11 - [Programing/Android Studio With Flutter(Dart)] - flutter/Dar..
이따금씩 플러터 앱을 실행하면 이러한 오류가 뜬다 영어 뜻대로 flutter를 실행하기 위한 cocoaPods의 저장소가 오래되어, 종속성을 충족하기 어려워 Pod 레포지터리 업데이트를 해주세요. 라는 뜻이다. 그렇다면... 해줘야지.. 우선 왼쪽에 프로젝트 창에서 ios 안에 Podfile.lock을 지워준다. 저기 연두색 Podfile.lock을 우선 지워준다. 그러고 나서 터미널 창에 다음과 같은 명령어를 입력해준다. cd 내 앱이 있는 경로/ (ex test앱이라 가정할 때, folder/test) 입력한다. 그다음에는 cd test/ios를 입력하여 ios로 들어가 준다. pod install --repo-update 라고 입력하고, 앱을 실행해 보자. 만약에 아래와 같은 오류가 뜬다면 지정된 ..
참으로 기이한 일이다. 이 오류로 오전 시간을 다 까먹었다. 요즘 여러 플러그인을 설치하면서 재미를 느끼는 와중에 아래 영상과 같은 오류가 떴다. 각 다트별로 화면에 들어가면, 흰색 두꺼운 커서가 뜨면서 한글 입력이 안 되는 것이다. 웃긴 거는 영어로 입력한 뒤에 한글을 입력하면 해결이 되었는데, 매번 이런식으로 불편을 겪고 싶지 않았다. 일단 원인이 뭔지 모르는 상황이었는데, 다행히 해결책을 찾았다. 우선 저 두꺼운 커서는 아래와 같이 없애준다. 맥 기준으로 preferences 위에 녀석을 해제하면 두꺼운 블락이 사라진다. 그렇다면 한글이 안쳐지는 원인은 무엇일까? 찾아보니 이 녀석이 문제였다. 이유는 정확히 모르겠으나, 이 ideaVim이라는 플러그인을 비활성화하니 한글이 정상적으로 나오는 것을 확..
안드로이드 네이티브 개발자들에게는 익숙한 바텀 내비게이션 탭 바에 대해서 글을 작성하려고 한다. 갓러터에서 이와 비슷한 패키지가 있다. 따로 외부에서 가져오지 않아도, 내부 패키지에 있기 때문에 그대로 사용해도 된다. 바로 DefaultTabController이다. 위에 사진은 내가 간단한 프로젝트를 위해 사용한 탭이다. 위와 같은 탭바를 코드로 살펴보자. 사용법 나같은 경우는 main.dart에서 맨 처음 앱 화면에서 사용하기 때문에 (보통 이런식으로 한다) Scaffold를 DefaultTabController로 감싸준다. return DefaultTabController( length: 3, child: Scaffold( ... ) ... ); length는 총 아이템에 개수를 이 메서드에게 알려주..
회사에서 다음 앱을 출시하는 동안, 앞으로 많이 사용하게 될 MediaQuery에 대해 공부한 내용을 적는다. 유튜브 코딩 파파를 참고했다. MediaQuery 반응형의 따른 앱 내의 패키지이다. css에서 쓰인다. 보통 디바이스마다 가로나 세로 길이가 다르기 때문에 앱에 사이즈에 맞는 가로나 세로의 값을 가져오는 것이 일반적이다. 보통의 사용법 MediaQuery.of(context).size.witdh //앱 디바이스의 가로길이 MediaQuery.of(context).size.height //앱 디바이스의 세로길이 보통 다이얼로그나 혹은 사이즈를 넣어줘야 하는 Container나 Text 등등, 앱마다 각각 다른 사이즈로 화면에 표시된다. 그래서 위와 같은 사이즈를 두어, 디바이스의 크기에 대한 대..
최근에 배운 게 많아 벌써 하루에 두 개의 글을 쓴다. 이번 기능은 생각보다 어렵지 않기 때문에 금방 끝내려고 한다. 이번 기능은 저번 예제에서 사용했던 AnimatedContainer와 연동해서 사용한 예제를 보여주려고 한다. 예제라기보다는 어떻게 사용하는지 말이다. (예제 코드 만드는 게 여간 힘들다...) 우선 Gif 파일을 준비 해준다. gif는 구글에 치면 많이 나온다.. 아래와 같은 기능을 할 것이다. AnimatedContainer 기능은 저 사각형의 다이얼로그를 동그랗게 shape 할 때 사용하였는데, 방법은 이전 글에 있으니, 우선 이 것부터 보고 오면 좋을 듯싶다. 2021.09.16 - [Programing/Android Studio With Flutter(Dart)] - flutte..
오늘은 애니메이션 처리에 대해 글을 쓰려고 한다. 여러 유용한 패키지가 있었지만, 기존 flutter가 가지고 있는 AnimatedContainer를 한번 사용해 보려고 한다. 우선 flutter ui가 나는 아직 미숙하므로, 조잡한 예시를 보여주겠다. 정말 조잡하다. 하지만 실전에서는 아래와 같이 사용했다. 위에 방법은 기본적인 코드만을 짰기 때문에 나온 것이다... 아래 영상처럼 사용할 수도 있겠다. 헤헤 내가 만들었다. 물론 Gif를 사용하는 패키지를 포함시킨 거라 중간중간 Duration을 삽입하는 애를 많이 먹었다. 그렇다면 코드를 보자 사용법 우선 dart파일 두 가지를 준비한다. main.dart이다. import 'package:flutter/material.dart'; import 'an..
참으로 오랜만에 글을 쓴다. 오랜만에 글을 쓴다는 말도 자주 사용하는 말이다. TIL은 매일매일 써줘야 하는데 최근에 회사 업무에 집중한 나머지.. 역시나 아직 나는 부족한가 보다. 오늘은 flutter에서 외부 음악(유튜브 음악, 멜론 음악)이 재생될 때, 앱 내에서의 재생(음성, 음악)을 실행하면, 외부음악이 잠시 꺼지고, 앱 내의 음악이나 음성을 모두 다 재생하고 끝냈을 때, 외부 음악이 다시 켜지는 이 복잡한 과정을 컨트롤할 수 있는 패키지를 소개하겠다. 첫 번째 패키지는 https://pub.dev/packages/audio_session audio_session | Flutter Package Sets the iOS audio session category and Android audio at..
늦게까지 회사에서 공부한 뒤 방금 줄넘기 2000개를 마치고, 샤워를 하고 나왔다. 회사에서 오늘 회의를 밤늦게 하는 바람에 오늘 배운 내용을 적을 수는 없어.. 시간도 늦고 간단하게 오늘 자바 환경변수 설정에서 헤매던 도중 알게 된 오류 해결법을 올려두겠다. 해결법 general error during semantic analysis: unsupported class file major version 60 이러한 오류가 떴다. 이 오류는 아직 gradle이 자바 16 버전을 지원하지 않는 뜻이라고 한다. 그러므로, 자바 15 버전을 다운로드하여 적용하면 된다. 너무 간단히 끝났다. 그렇다. 이렇게 하면 된다. 뭐 추가로 다운받는법과 환경변수를 추가하는 방법도 올리겠다. https://www.oracle..
오늘 하루도 마무리하면서 알게 된 내용을 정리해보려고 한다. 이 글을 다 쓰고 난 뒤에는 패스트캠퍼스 강의를 하나 들을 생각이다. 회사에서 운영중인 패스트 캠퍼스 아이디라.. 이번에 처음 써보게 되는 거라 설렌다. 우선 역시나 지금 앱을 개발하면서 앱 버전 정보를 가져오려 했으나, 안드로이드에서 앱 버전, 아이폰에서 앱 버전을 각각 가져와야 한다는 에러가 발생했다. 기존에는 이 패키지를 사용하였다. https://pub.dev/packages/package_info_plus package_info_plus | Flutter Package Flutter plugin for querying information about the application package, such as CFBundleVersion..
오늘은 조금 늦게 들어왔다. 그래도 글을 써보자. 시간도 없고, 오늘은 이 녀석 때문에 시간 좀 잡아먹어서 똑같은 실수를 반복하지 않기 위해 글을 써본다. 맥에서 갑자기 귀여운 여우 버전으로 업데이트를 하라길래 바로 업데이트를 했다. https://android-developers.googleblog.com/2021/07/android-studio-arctic-fox-202031-stable.html Android Studio Arctic Fox (2020.3.1) Stable Posted by Amanda Alexander, Product Manager, Android We are excited to announce that Android Studio Arctic Fox is now availa... ..
요즘 뜻대로 코드가 잘 짜여서 기분이 좋다. 오늘은 회사앱에도 적용 SmartRefresher이라는 패키지에 대해서 소개해 볼까 한다. https://pub.dev/packages/pull_to_refresh/install pull_to_refresh | Flutter Package a widget provided to the flutter scroll component drop-down refresh and pull up load. pub.dev 우선 이곳에 smartRefersher를 dependencies에 추가시켜주자. dependencies: pull_to_refresh: ^2.0.0 다음은 홈페이지에서 가지고 온 예제이다. 주석 처리를 하면서 천천히 설명을 하는 시간을 가져보고자 한다. 그렇다..
flutter 공부 한창이다. 오늘 사용한 함수는 sort라는 함수이다. 보통 List 함수에 있는 리스트의 여러 인자들을 오름차순이나 내림차순으로 정렬하기 위해 사용된다. 기본 적인 사용 방법을 보자. 사용법 int type 오름차순 void main(){ List numbers = [400, 59, 13, 7264]; numbers.sort(); print(numbers); } numbers라는 배열에다가 그냥 sort() 함수를 사용하면, 작은 인자부터 큰 인자까지 배열을 바꾸어 준다. //numbers = [13, 59, 400, 7264]; 그러면 반대로 내림차순을 알아보자. int type 내림차순 void main(){ List numbers = [400, 59, 13, 7264]; numb..
참고 문헌 https://flutter-ko.dev/docs/cookbook/persistence/sqlite SQLite에 데이터 저장하기 로컬 디바이스에 많은 데이터를 저장하고 쿼리를 요청해야 한다면, 로컬 파일이나 키-값 저장소 대신 데이터베이스를사용해보세요. 일반적으로 데이터베이스는 다른 로컬 솔루션보다 더 빠른 flutter-ko.dev 마침내 오랜만에 글을 쓰게 되었다. 오늘도 채팅 작업을 잘 마무리하고 그동안 유용하게 써왔던, sqlite에 대한 사용법을 작성할 생각이다. 9시 50분에 차를 타고 퇴근을 해야 하기 때문에 다소 간략하게 쓸 수도 있지만, 집에 가서도 쓰면 되니 뭐.. 간단하게 내부 디비를 왜 써야 하는지 설명하겠다. 내부 데이터베이스(sqlite)의 필요성 보통 우리는 데이터..
요 며칠 동안 행복한 플러터 세상에 살아가는 중이다. 예전에 코틀린이나 자바를 사용할 때도 싱글톤 패턴이라는 말을 익히 들었지만, 무지한 상태에서 싱글톤이라는 단어는 나에겐 이해하기 어려운 단어였다. 그래도 지금은 실무에서 사용했고, 어느 정도 이해하였기 때문에 포스팅을 해보려고 한다. 참고 자료 https://another-light.tistory.com/77 [dart] what is factory? | 싱글톤 패턴 singleton pattern class what is factory? flutter에서 모델 클래스를 만들 때 아래 같은 코드가 자주 사용된다. 그런데 factory라는 것을 dart에서 처음 봤다. factory 키워드는 무엇이고 어떤 역할을 할까? class Book { final..
출처 책 (처음 배우는 플러터 - 유동환) 오늘 알아볼 것은 flutter에서 사용하는 Dart의 장점 중에 장점 역할을 맡고 있는 녀석을 소개한다. 선택 인자와 이름 있는 인자이다! 1. 선택인자(positional optional parameter) 이름이 상당히 깁니다. 선택인자는 자신이 선택할 수 있는 인자입니다. 한 마디로 이 인자를 선택해도 되고, 안 해도 되는 것입니다. 예제를 보면서 살펴 보겠습니다. //선택인자(positional optional parameter) int num1 = 100; int num2 = addNumber(100) //inc = 1 대입 int num3 = addNumber(100, 20) //inc = 20 대입 // 넣은 인자 값들을 더해서 int 값으로 반환..
저번 주에 과음을 많이 해서 그런가 항문 옆에 조그마한 혹이 났는데, 그냥 괜찮겠지 하다가 어제 병원을 가보니 치루라고 한다... 오늘 바로 아침 9시에 수술을 받고 현재 병실에서 코딩 공부 중이다. ... 앞으로 항문 관리를 잘하자... 더티한 얘기는 그만하고, 오늘 배워본 생명주기에 대해서 정리해보려고 한다. StatelessWidget Stateless는 단순히 build 된 것을 단순히 return 해주기만 해서 생명주기가 제공되지 않는다. 오호 그렇다면 바로 StatefulWidget으로 넘어가 보자. StatefulWidget StatefulWidget.createState() 상태를 생성, 이 메서드를 제외하고 나머지는 모두 State 클래스에 있다. mounted == true mounte..
참고 블로그 https://terry1213.github.io/flutter/flutter-provider/ [Flutter] Provider를 통해 상태 관리하기 Flutter를 통해 개발을 진행하다보면 상태(State) 관리가 매우 중요하다는 것을 느낄 수 있다. terry1213.github.io 예전에 내가 약간 난독이 있어나 보다. 이해가 별로 되지 않아서 그런가? 어려운 공식문서나 누가 가독성 어렵게 설명해 놓은 글을 제대로 읽지 못해 여간 스트레스를 받고 있었다. 아무래도 가독성인 듯하다. 누가 flutter Provider에 대한 글을 너무 잘 써두어서 읽기가 너무 편했다. 일단 pub.dev에서 provider을 설치해보자. https://pub.dev/packages/provider p..
회사에서 사용하는 앱에 플러터 버전이 2.0.2라는 것을 들었고, 다운 그레이드를 해야 한다는 것을 알았다. 오늘 해볼 것은 다운그레이드 동시에 터미널에 플러터 설치 과정에서 환경변수 설정하는 법을 동시에 해볼 것이다. (다운그레이드 하는 김에..) 맥에서는 카탈리나 이후부터 환경변수를 bash파일이 아닌 zsh에서 설정해주어야 합니다. zsh: command not found: flutter error 해결법 터미널에서 환경변수를 설정할 때 위와 같은 에러가 뜰 것이다. 다음과 같이 해보자 터미널에 1. vim $HOME/.zshrc 라고 입력을 한다. 그러면 이런 식을 창이 뜰 텐데 그림처럼 플러터 bin에 경로를 저런 식으로 입력해준다. 입력하는 법은 간단하다. "I" 키보드를 누르면 Insert ..
한창 언어 공부와 다급하게 프로그래밍 공부를 하면서, 자주 보았던 AndroidX에 대한 이야기, 문서를 볼 줄도 몰라 어려워만 보였던 AndroidX에 대해 오늘 드디어 정리를 해보려 한다. AndroidX 란 AndroidX는 기존에 사용하고 있던 com.android.support.* 라이브러리(옛 라이브러리 들)들을 하나로 통합한 것이라고 설명할 수 있다. 더 자세히 말하자면, 안드로이드팀이 JetPack(여러 라이브러리들이나 여러 tool들을 묶어놓은 모음집) 내에서 라이브러리를 개발하거나, 테스트하거나, 패키지화나 버전 및 릴리스를 하기 위해 만든 오픈 소스 프로젝트이다. 결론은 기존에 있던 라이브러리들을 쓰기 좋게 통합한 것이라고 할 수 있다. 이 AndroidX를 사용하려면 Android ..
요즘 꾸준히 플러터를 학습 중이다. 어느 정도 학습하고 간단하게 프로젝트를 만들어 봐야겠다. 오늘은 플러터에서 사용되는 const와 final에 대해서 알아보려고 한다. 우선 이 두 가지에 대해 알려면 컴파일 타임과 런타임에 대해서 알고 가야 한다. 1. Compile Time 컴파일은 보통 C언어나 자바 같은 객체지향 언어에서 소스코드가 작성되고, 컴퓨터가 인식할 수 있게 작성된 코드를 기계어로 변환하여 실행 가능하는 프로그램을 만드는 과정이라고 할 수 있다. 안드로이드 스튜디오에서는 이 버튼을 누르면 제일 첫 번째로 컴파일이 된다고 할 수 있다. 즉, 컴퓨터가 알 수 있게 기계어로 변환되는 과정이라고 할 수 있다. 2. Run Time 두 번째로는 런타임이다. 런타임은 컴파일 과정을 마치고, 응용 프..
아직 사실 나도 플러터에 대해 잘 모른다. 헤헤... 아직 로그인 기능 구현 정도 하는 단계라 Null Safety에 대한 공부는 아직 접근하지 않았지만, 오류 해결을 했으니, 기록이라도 하려고 글을 써본다. 플러터 Run을 하는 과정에서 위와 같은 오류가 떴다. Cannot run with sound null safety because dependencies don't support null safety 그대로 직역하면 "종속성이 null Safety를 지원하지 않기 때문에 사운드 null Safety로 실행할 수 없습니다." 여기서 먼저 간단하게 나마 Null safety에 대해 알아보자, 구글링을 해보니 간단하게 설명하자면, 기존에 변수가 널 값이나 혹은 타입에 따른 고유의 값을 가지고 있을 수 있..
여자 저차 해서 Java -> Kotlin -> Flutter 순서대로 개발언어를 배우게 되었다. 점점 복잡해지는 느낌이지만 오히려 좋다. 더 폭넓게 배우기도 하고, 다른 언어도 같이 병행하면서 배우고 있어서 지루한 느낌이 없다. 아직은 배우고 있지만, 그래도 어느 정도 배운 것을 정리하는 차원에서 글을 써보려고 한다. 이 글을 쓰기전에 Flutter 설치 법을 쓰려고 했는데, 터미널 사용법에서 잠깐 막혀서 화나서 꺼버렸다 헤헤.. 설치가 중요하긴 한데, 이미 인터넷에 많은 자료가 나와 있으니, 내가 배운 것을 정리하는 것이 더 중요하다는 것을 파악했다. 우선 나 같은 경우는 코딩셰프님의 영상을 보며 익힌 점을 정리하므로, 출처는 남긴다. 정리 Widget 오늘 배운 것은 여러 가지이지만, 크게 두 가지..