우선 플러터는 UI 프레임웤이다. 이는 코드 패기지의 모음이라 할 수 있다. 즉, 크로스 플랫폼 앱과 사용자 인터페이스를 작성하는 데 코드에서 사용할 수 있는 여러 가지 것들이 존재한다.이는 미친 장점인데 원래는 Android 개발자, swift 개발자를 따로 뽑아서
공홈에 방문한다. 그럼 공식 문서로 연결되고 셋업 페이지로 들어갈 수 있다.위에 쓰여있기도 하지만 여기서 고를 것은 본인이 deploy하고자 하는 환경이 아닌 현재 개발 환경을 클릭해야한다는 것이다.앞전 포스팅에도 말 했던 것 처럼 Flutter는 반드시 git이 설치
이때 경로에 2가지 단어가 씌여야한다면 snake_case를 추천한다.나같은 경우는 보안을 위해 주기적으로 포맷되는 C:와 그렇지 않고 내 개인 프로젝트를 관리하는 D:로 나누어 관리하기 때문에 cmd에서 디렉토리를 이동해야한다.이렇게 바뀌어있는 것을 확인할 수 있을
컴파일 순서 앞서 톺아보기 포스팅에서 봤듯 파일에 코드가 있는 걸 볼 수 있는데 이런 코드는 Android나 iOS 장치에선 이해 못 한다. 플러터 앱을 실행할 때 발생하지 않는 일은 이 코드가 장치에 복사되어 실행된다는 것이다. 1. Parsed from top t
위와 같은 코드가 있다고 가정해보자. 그럼 우리는 main() 이라고 밑에 main함수를 실행을 해줘야할까? => 아니다.main 함수위에 Run|Debug|Profile 탭들을 확인할 수 있는데 이것이 다트 프로그램의 특별한 기능이다.장치에서 앱이 활성화되면 자동으로
MeterialApp()에 들어가는 인수중 하나로 설정해줘야하는 주요 인수 중 하나이다.앱을 실행하는 UI로 어떤 종류의 위젯인지, 어떤 UI 요소가 앱 안에 디스플레이돼야 하는지 정의해야 한다.텍스트 위젯을 내장해 표시해보자.텍스트 위젯 또한 많은 매개변수를 받는다.
역시 공식문서에서 확인할 수 있고 또한 사용법 또한 볼 수 있다.우리 앱에 보기 좋은 화면을 설정하도록 돕는 위젯이다. 그리고 이는 화면을 설정하려면 당연 MeterialApp 안에 설정이 되야한다. 왜냐하면 MeterialApp 위젯은 전체 앱을 설정하는 데 중요한
post 제목에서 알 수 있듯 바로 type이다.다트는 type-safe language라고 할 수 있다.즉, 모든 값은 특정 type이 있다는 것이다.하지만 1가지 type만 있는 것이 아니다. 각각의 타입은 extend를 통하여 결국은 최종적으로 Object 라는
widget은 객체라는 것을 앞서 언급하였다. 또 거의 대부분의 value가 obj라는 것을 알 수 있었다.즉, 이 obj가 dart의 fundamental한 concept이라 하였다.그런데 이 class는 java를 했다면 obj와 매우 밀접한 연관관계를 갖고있다고
font-end frame work 개념의 props에 대해 알아보자.하지만 함수형 프로그래밍인 font-end frame work와는 다르게 dart는 객체지향이라 하였고 부모컴포넌트 처럼 사용되는 생성자 함수로 빌딩블록을 불러온다고 하였다.즉, props을 생성자
font-end frame work 개념의 props에 대해 알아보자.하지만 함수형 프로그래밍인 font-end frame work와는 다르게 dart는 객체지향이라 하였고 부모컴포넌트 처럼 사용되는 생성자 함수로 빌딩블록을 불러온다고 하였다.즉, props을 생성자
우선 lib 폴더와 같은 노드상에 asset 폴더를 생성하고 그 자식 노드로 images 폴더를 생성한 뒤 넣어주면 된다.그다음 펍스펙 얌파일로 가서 주석화된 asset 부분이 나올 때까지 스크롤을 내린다음미리 적혀있는 2개의 예시를 지우고 위에 assets 부분의 주
Column 자세히 보면 Container widget에도 child 인수가 있고 또 Center widget에서 child 인수가 있는데 만약 여러개의 child를 갖고싶을 땐 어떻게 하면 될까? 위 사진을 보면 알 수 있어 어떻게 child 요소들을 놓고싶냐에
앞서 포스팅한 custome widget을 만드는 방법은 많진 않지만 우리는 Stateless한 Widget을 만들었다.이는 내부적으로 바뀌는 값이 있다면 매우 잘 못 된 선택이다.어떠한 값을 받아서 어떠한 값을 return하는 경우에는 더더욱이 말이다StateFull
공홈에서 받을 수 있다.다시 말하지만 본인이 배포하고자 하는 OS를 고르는 것이 아닌 본인의 개발환경을 골라야한다.또한 Git이 반드시 설치되어있어야한다.Flutter SDK는 플러터의 도구와 뼈대 그 자체이다.그래서 본인 cpu에 맞춰서 설치하면 되고 난 m1 칩이기
조건부 렌더링(Render content Conditionally) var 변수에 widget를 담을 수 있다. 다만, 위와같이 설정한다면 var의 변수에 들어갈 수 있는 타입은 customWidget에 한하기 때문에 의미가 없다. 그래서 우리가 의도한 대로 cust
프레임웤의 state 메모리에 데이터를 만들기 위해서는 우선 다른 font-end framework과는 다르게 데이터의 골조가 되는 class를 선언해줘야한다.JAVA를 하면 당연한 소리지만 함수형 프로그래밍 (TS제외) => 객체지향으로 넘어오다보니 아직 적응이 안
물론 공홈에서 본인이 원하는 폰트를 지정하여 수동으로 파일을 불러온 후 pubspec에 등록후 수동적으로 사용할 수 있긴하다.또한 pub.spec의 홈페이지에서 여러 패키지들을 확인할 수 있는데 그중 구글 폰트를 검색하여 받아도 괜찮다.공식 다트 패키지 사이트로 thi
만약 당신이 하위 요소에서 받은 값을 부모요소에서 배열로 저장야한다고 가정하자.그러기위해서는 다음과 같은 일련에 동작을 따라야한다.위 코드처럼 List에 계속하여 새로운 메모리를 생성하고 싶지 않기 때문에 한 배열을 만들고 거기에 final 키워드를 넣어서 새로운 메모
다만 java에 있는 map 개념을 추가적으로 설명하기위해 예제 코드를 가져옴위 코드를 보면 여느 언어와 같은 일반적은 for문인 것을 확인할 수 있다.또한 위 코드와 같이 spread operation + .map을 for문으로 갈아치울 수 있다.key, value로
SizedBox는 물론 padding 대신에 UI간 padding 값을 줄 때고 사용되긴 한다.하지만 결국 둘다 어떠한 UI를 warpping한다는 점에서 동일하다.이때 위 Container의 가장 큰 장점은 decoration이 가능하다는 것이다.각각 Row, Col
위 코드를 보면 그저 다른 class의 prop값을 받아서 데이터를 만드는 함수에 불과하다.우리가 아는 매개변수를 받고 어떠한 로직을 돌려서 어떠한 결과값을 반환하는 메서드와는 전혀 다른 기능을 하고있다는 뜻이다.따라서 우리는 그저 prop 값을 받아서 데이터를 생성해
flutter를 VScde와 DevTool에서 디버깅 해보자
위 third party library는 자동으로 id(unique)값을 생성해주는 기능을 한다.이 클래스를 생성(인스턴스화)할 때마다 대한 고유 ID를 생성하고 싶다면 생성자 함수의 괄호를 닫은 다음에 초기화 목록(:)이라는 걸 추가할 수있다. 이 콜론 다음에 이 생
만약 Expenses라는 소비 객체를 만들 때 각각 카테고리를 정해서 카테고리 별로 묶고싶을 때 String으로 한다면 IDE는 모든 것을 받아들이기 때문에 typo가 난다면 어디서 틀렸고 어디서 잘 못 됐는지 알 수 없다. 그래서 우리는 Fixed Set이라는 특정
Columns의 단점은 최초에 로드되는 모든 데이터를 일단 UI를 만들고 본다는 것이다. 이는 굉장히 불필요하고 많은 퍼포먼스 저하를 야기할 것이다.즉, 길이가 가변되고 정확한 길이의 끝을 모르는 경우에는 Column 보단 다른 방식을 권장한다.위 위젯은 Column과
TextField 위 위젯은 input 태그와 동일하다. 최대, 최소 값을 입력할 수 있어서 굉장히 편리하고 또 input type을 지정할 수 있어서 굉장히 편리하다.
Html5의 select option 포지션으로 밑에 사진을 보면 알 수 있듯 2개의 매개변수를 받는다. 그리고 이때 dynamic 타입의 키워드인 ? 가 쓰였는데 왼편에 있는 items에 선택된 값에 따라 바뀌기 때문이다.변수를 하나 생성하고 (이때 defualt 값
우선 버튼을 클릭하면 data를 검증 후 전송하는 함수를 만든다고 가정해보자.유효성 검사 함수는 위와 같다. 이 함수는 사용자가 입력한 날짜, 가격, 제목을 토대로 null값이 있는지 판단 후 하나라도 이상이 있다면 alert dialog를 띄워주는 함수이다.이제 이
swipable, removable, dismissible 이라고 불린다. 이 위젯은 어떠한 List로 되어있는 위젯을 warpping하여 해당 List를 swipe하여 제거할 수 있도록 해주는 wrapper 위젯이다.얘는 2개의 속성값을 받는다. 바로 key, onD
위와 같이 main에서 테마 작업을 시작할 수 있다. 하지만 자세히 보면 알겠지만 사용자의 모든 환경을 고려해 각각 사용될 Text와 우리가 정의한 수많은 위젯에 대하여 일일이 지정할 수는 없다. 그래서 각 조건별로 지정할 수 있도록 하는 방법이 있는데 바로copyWi
앞서 theme 시스템에서도 배웠듯 우선 색상 스키마를 만들어야한다. 이때 명칭은 당연히 Dark가 들어가서 기본 테마와 차별을 두어야한다.또한 하얀색 부분의 속성들을 모두 어둡게 바꾸줄 수 있다.위 사진에서 볼 수 있듯 MaterialApp의 theme 속성 옆에 d
flutter로 해보는 동적 랜더링
위 사진을 보면 알 수 있듯 뭔가 iphone 스럽지 못 하다. 우리가 흔히 보는 iphone alert은 아래와 같이 생겼기 때문이다.이제 현제 모달을 위와같이 바꿔보자.쿠퍼티노는 단순히 iOS의 스타일언어 또는 디자인 언어의 이름이다.그래서 플러터 앱에서 쿠퍼티노를
Three Tree 플러터는 3개의 트리가 있다. element Tree 개발자가 작성한 Widget Tree를 기반으로 Translate 한 element Tree가 있다. Render Tree
그동안 우리가 key를 써온 곳은 1. class 생성 시 super class의 key를 받아왔었다. 2. Dismissible을 사용할 때 어떤 요소가 삭제됐는지 식별시켜주기 위해 key를 사용하였다.그럼 이 식별자 key가 왜 필요한지 한 번 알아보자.일단 이해를
일반적으로 Multi Screen App을 제작한다면 플러터에선 모든 화면이 기본 화면 셋업을 위해 스캐폴드 위젯을 사용하는데 그 이뉴는 appBar는 스크린에 따라 다르기 때문이다.예를 들어 appBar에 다른 타이틀이나 버튼이 있을 수 있고 그러므로 appBar나
흔히 아는 스택 구조와는 조금 다르다.이때 Row, Column 위젯 처럼 children을 필요로 하는데 작성 순서는 z-index가 낮은 순으로 작성해주면 된다.이제 스택 위젯의 children으로 사용하기 좋은 위젯을 설명하겠다.card는 앞서 써봤을 것 이다.
즉, 햄버거 버튼으로 사이드 바에 메뉴를 만들고 싶다면 이 또한 Scaffold 위젯을 사용해야한다.또한 Drawer 메뉴는 StatelessWidet으로 선언하는데 그 이유는 다른 화면으로 가는 버튼을 제공하지만 상태를 설정하지 않고 내비게이터 객체의 도움을 받아 수
개념은 내부 state가 변하기 때문에 StatefulWidget을 사용해야하고 변수를 선언해줘야한다.state class에서는 build 메서드에서 사용할 변수를 선언해주고 이를 init 메서드로 초기화를 해줘야한다. 왜? =>클래스 변수를 초기화할 때 위젯 속성(w
Riverpod 위 코드로 라이브러리를 설치하면 된다. 또한 위 라이브러리는 provider를 개발한 개발자가 만든 라이브러리이며 provider보다 조금 더 편리하고 유연한 상태관리를 위한 라이브러리로 업그레이드 됐다. 이때 riverpod(다트), flutte
자 앞서 riverpod의 기본적인 기능에 대해 알아보았으니 리팩토링은 진행해보자. 우선 위 코드를 모면 flutter 메모리상에 데이터를 저장하고 사용하고 있다. 그리고 이는 더이상 State class에서 나오는 widget객체를 사용하고 있지도 않기 때문에 이
Explicit 사전적 의미로 명시적이라는 뜻을 갖고있고 모든 animation에 대한 통제권, 즉 구현을 개발자가 직접한다. 단점은 개발자가 손수 구현해야하기 때문에 컨트롤할 것이 많아지고 이는 굉장히 복잡한 작업이 된다. 구현 1. StatefulWidget만
Explicit과 반대로 암시적인 이라는 의미를 갖고있고 Flutter가 animation을 통제하도록 하는 방법이다.역시 Explicit과 반대로 자유도는 조금 떨어질지라도 훨씬 복잡하지도 않고 관리할 코드도 줄어든다.또한 이미 위젯화가 되어있어 그냥 갖다 쓰기만 하
페이지를 전환시켜주는 위젯 중 하나이다.원리는 위와 같다. 하지만 사용법은 굉장히 간단하다. Hero 위젯도 여타 다른 animate 위젯과 마찬가지로 child 속성을 부여하고 추가적으로 tag라는 key값을 부여해주면 된다.이때 from ~ to는 논리적으로 구현되
Form 참고로 우리는 앞서 TextField를 포스팅 하여 사용자로부터 input값을 받은 경험이 있다. 그렇다면 TextField 위젯과는 어떤점이 다를까? 미리 스포를 하자면 1. 사용자 입력받기 2. 사용자 입력 유효성 체크하기 3. 유효성 체크결과 보여주기 등
우선 http 요청을 하기위해서는 dart에서 http를 사용할 수 있도록 도와주는 library를 설치해야한다.또한 import '' 안의 내용을 bundling하여 as 키워드로 객체화 하여 사용하면 편하다.물론 as 키워드의 오른편에 있는 키워드는 마음대로 지어도
Get 1. get 메서드 http.get 메서드로 url만 보내서 값을 받아서 변수에 저장한다. 이때 물론 header에 파라미터를 추가하여 보낼 수 있다. 2. response.body 백앤드에서 지정한 타입이나 결과 코드들의 데이터가 담겨있는 부분이다. 그래서
변수 선언을 하였다면 이제 build 메서드에 조건식으로 값을 부여하면 된다.이름 그대로 동그란 진행상태 표시기다.만약 \_isLoading 과 같은 변수를 ? 키워드 같은 3항 연산자를 사용하여 UI를 변경할 때는 setState 함수와 함께 사용하여야한다.
뭐 사실 Rest API는 백엔드와 함께 결정하여 CRUD등 다른 메서드들을 어떻게 만들어갈 것인지 API 명세에 따라 다르지만 여기서는 firebase의 API 명세에 따라 작성하도록 하겠다.즉, 원래는 delete 메서드에 바디를 추가하고 헤더를 설정할 수 있지만
물론 이 부분도 back-end에 따라 다르다. 어쩌면 status code로 동작할 수 있고 또 어쩌면 그냥 빈 배열을 반환할 수 있다.하지만 여기 firebase에서는 String type의 null을 반환하므로 이때 isload state를 false로 바꾸고
Future Widget Build는 2개의 매개변수를 받고 그중 하나는 Http Req가 오면 해당 결과값을 주시하고 있다가 결과값에 변화가 생기면 자동으로 ui를 업데이트하는 기능을 갖고있다.이제 하나하나 자세히 알아보자..우선 Future Widget Build와
controller 여기서 소문자로 작성한 이유가 있다. 여기서 말하는 controller는 ()=> 를 대신하는 컨드롤러이다.
앞서 이미지 선택 UI, image picker 객체에 대한 설명과 사용법, 그리고 File 타입과 메서드까지 작성해보았다. 이번에는 해당 이미지를 preview로 갖고와서 보여주는 조금은 부가적인 부분에 대해 설명하겠다.정확한 명칭인지는 모르겠다. 어쨌듯 보여주려는
이제 앞서 사용한 camera 코드에 location 기능을 붙여보자. 우선 flutter location은 역시 pub.dev에서 받을 수 있다. flutter location의 특징은 역시 사용자의 핸드폰의 위치정보를 가져올 수 있다. 또한 flutter nativ
앞서 location 플러그인으로 현재 사용자의 위치 정보(위,경도)를 얻어올 수 있었다. 하지만 그 어느 누구도 위경도만을 갖고 주소를 찍어서 다니지 않는다. 따라서 사용자에게 사람냄새가 나는 정보를 제공하기위해 다양한 지도 API를 써도되지만 나는 Google Ma
Google Maps Flutter 이제 앞서 포스팅한 google 지도와 연동하여 또 다른 플러그 인을 사용해 보자. 바로 google maps flutter 이다. 물론 실제 사내에서 이것들 도입하기란 쉽지 않다 돈과 직결되어있기 때문에 무료인 오픈소스들을 사용
Flutter Path provider는 이미지를 저장해야 할 경로에 쉽게 접근할 수 있는 패키지이다. 또한 운영 체제에 의해 삭제되지 않는다.이 패키지는 우리 응용 프로그램의 데이터를 저장하는 데 사용할 수 있는 경로에 쉽게 접근할 수 있게 해준다.또한 path라는
FireBase SDK 우선 SDK에 대해서부터 알아볼 필요가 있다. SDK(Software Developement Kit)란 한마디로 코드 모음이다. (여기서 사용하는 firebase sdk는 dart prj에 사용할 수 있는 flutter 코드 패키지가 될 것이다
앞서 우리는 firebase sdk를 설치하여 firebase_auth 패키지를 설치할 수 있었고 그에 따라 원리는 http와 기타 유효성 검증에 따른 코드를 매우 길고 복잡하게 작성해야하지만 매우 간편하게 코드를 짤 수 있게 되었다.이제 그 예제를 봐보자.추가적으로
앞서 배운 FutureBuilder와 꽤나 유사한 구조를 갖고있다. 각각 stream, future에 의존되는 값에 의해서 build하는 위젯이 바뀐다는 것이다. 그럼 두 Builder 메서드의 차이점은 무엇일까? => 바로 FutureBuilder는 단 1개의 값 |
Firebase Image Storage 앞서 설치한 firebase SDK에서 제공해주는 Image Storage 기능이다. 사실 이 기능은 back-end가 구축되어있다면 신경쓸 필요가 없는 부분이라 넘어가려했는데 기왕 firebase SDK 설치한거 auth 부
UI 작성 FocusScope unfoucous() 당연 위 메서드는 일반 메서드이기에 async 메서드 안에서 await 이전에 실행해줘야한다. 멈출 수 있기 때문 핵심 기능 사실 flutter firebase sdk를 사용하여 매우 짧고 간편하게 구현할 수 있
이 서비스 역시 auth와 cloude storage처럼 library를 설치하고 세팅해주어야한다. 우선 공식 문서를 들어가보면 순서들이 있는데 우선 나와있는 대로 iOS 부터 조져보자.참고로 유료 개발자 계정이 있어야한다. apple 개발자 멤버십을 보면 총 3단계가
우선 screens에 코드에 들어와서 여기서 작업을 해주겠다. 왜냐하면 해당 screens이 login후 authenticated된 사용자들만 들어오는 페이지이기 때문이다.그래서 위 코드에서 push 알림을 주기위해서는 StatelessWidget을 StatefulWi
Flutter webView 환경 세팅 시간이 곧 돈인 기업에서 특히 중소규모의 기업에서 목업 디스플레이를 일일이 flutter 코드로 바꾸는 것은 쉽지 않다. 물론 숙련된 개발자와 함께 오랫동안 쌓아온 보일러 코드가 있다면 금방 개발하겠지만 현재 우리 사내 app을
Flutter에서 웹뷰로 이미지 업로드하는 방법은 일반적으로 웹 뷰에 포함된 HTML 파일 내에 input 태그를 추가하고, Flutter의 WebView 클래스에서 이를 사용하여 이미지 파일 선택 다이얼로그를 띄우고 선택한 이미지 파일을 반환 받아서 네이티브와 통신하
firebase FCM 설정하기 전체코드 백그라운드에서도 알림 동작 FirebaseOptions 공식문서 ![](https://velog.velcdn.com/images/jeong_woo/post/8412f446-b35e-4617-a734-67af3597
근래 flutter docs만 보다가 kakao dev docs를 보는데 우선 한글의 반가움 매우 친절하게 상세히 설명되어있음 개발 포럼이 잘 형성되어있고 leader 급들의 개발자분들이 신속, 친절한 답변 다만 flutter 환경에서 android, ios를 개
https://docs.flutter.dev/deployment/android > (안드로이드) 앱에 디지털 서명하기 Google Play 스토어에 출시하기 위해서는 반드시 앱에 디지털 서명을 해야한다. 순서 KeyStore 만들기 앱으로부터 KeyStore참조
플러터 프로젝트 앱 스토어에 배포하기 앞서 작성한 것 중 반드시 지켜야할 것. unique한 app project id 값 알고있기 필수 항목 screen shot 준비하기 (https://studio.app-mockup.com/) 이슈관리하기 https://g
이전 포스팅에서는 local-notification을 사용하기 위한 설정을 잡았다. 이제 프로젝트에서 사용하기위한 설정과 실제 알림 코드를 작성해보자.이때 notification 초기화는 보통 flutter create 했을 때 기준 MyHomePage의 inistSt
플러터 로컬 알림 서비스 라이브러리 예제 코드
file 저장 backend 에서 mitipartfile 형태로 파일을 전송받을때 client에서는 어떻게 받을까? MultipartFile은 주로 HTTP 멀티파트 요청을 처리할 때 사용되는 Java 인터페이스이다. 일반적으로 Spring Boot 같은 서버 사이
Guideline 5.1.2 - Legal - Privacy - Data Use and Sharing 대충 보면 iOS 14.5 이상 버전에서는 AppTrackingTransparency 프레임웤을 추가하라고 나와있다. 요즘 어플깔면 항상 보는 그거다. 위 코드로
front-end 프레임웤이 시작되는 지점에서 flutter에서 넘겨줄 값을 저장하는 코드를 작성해 둔다.참고로 위 코드에서는 변리하게 문자열 공백을 기준으로 나누었다. 왜냐하면 flutter에서 넘겨줄 값이 항상 같은 양식으로 넘올 것이기 때문이다. 만약 양식이 변동
역시 설정이 꼬였을 때는 그냥 밀어버리고 다시 새로 생성하는 것이 최고이다. 나 역시 Android studio에서 flutter build ios를 한 후 xCode에 넘어가보면 항상 2개의 alert이 떴다. 그리고 이 경고를 클릭하면 버튼 하나로 설정을 다 최신
개발과 실제 testflight를 돌리거나 review를 맡겼을 때 내 예상과 다른 순간이 많이 있었을 것이다. 적어도 나는 그랬다. 이 개같은 iOS 14.0 이후 부터 적용되는 app traking transeparency는 아무리 쳐 permission req를
오늘은 플러터 코드 작성 시 코드 에러가 아닌 컴파일하는 과정 중에 에러가 발생하면 제일 먼저 해봐야 하는 조치를 알려드리겠습니다. (맥북 기준입니다) 빌드 에러가 발생하는 상황은 아래와 같은 상황에서 자주 발생합니다. XCode에서 Runner/AppDelega
플러터는 사실 굉장히 복잡한 옵션질을 할 수 있다. 알면 알 수록 굉장히 옵션질 할 수 있는게 늘어나서 아는게 많으면 무조껀 이득이다. Impeller engine 임펠러 엔진이 뭔가? 원래 플러터는 skia engine 을 사용했다. 하지만 이 스키아 엔진은 플러터
JIT Compiler(Just In Time): 코드 실행 시점에 컴파일을 수행할 수 있는 컴파일러로, 빠른 개발과 디버깅을 할 때 주로 사용되는 컴파일러이다.Flutter 개발 특징 중 하나인 Hot-Reload/Hot-Restart를 구현 할 때 사용된다.AOT
다트는 특이하게 stackTrace 객체도 함께 주어진다.이게 stack trace 이다. 말 그대로 에러의 stack 을 추적하여 고대로 보여주는 것이다.try-catch 가 무조껀 거쳐가는 곳이다.그럼 문제 try-catch 에 return 이 있다면 finally
우선 동기 비동기를 알아보기 전에 Dart 자바 처럼 multi thread 인지 아니면 typescript 처럼 single thread 인지 알아보자.우선 dart 는 single thread 이나 그러나. 스트리밍, 백그라운드 작업도 가능한데 이는 Dart 는 I
MaterialApp Dart 의 trigger 되는 포인트는 main.dart 이다. runApp 메서드를 넣으면 이제 우리가 convention 하게 자주 쓰는 앱 개발을 할 수 있도록 해주는 함수이다. MaterialApp 은 flutter 로 앱을 만들 때
12.1234 => 12.12 로 바꿔준다는 것이다. 물론 type이 int(double) => String으로 바뀌겠지Spacer 위젯은 언제나 const로 선언된다.또 Spacer는 Row , Column 위젯 모두에서 사용 가능하다.Spacer는 이름 그대로 남은
우선 기본 생성된 프로젝트에서 주석과 공백을 최대한 제거한 모습이다.보면 크게 1개의 class로 이루어져 있고 그 안에 각기 다른 3개의 작은 class가 위치해 있는 것을 볼 수 있다.그중 첫번째 MyAppclass를 오버라이드한 Widget이라고 볼 수 있는데 이
Scaffold 내부에 또 다른 위젯을 설정할 수 있다.대부분의 위젯은 다른 인수에 값을 넘기게 해주기 때문에 거의 항상 최소한 하나의 인수인수나 body: 혹은 child: 같은 걸 갖고 있다. 이는 또 다른 위젯을 원하는 것이다. 외부 위젯의 래핑 위젯에 포함되어