All(264)
-
[Flutter] Dart에서 Generic을 사용할 때, 런타임에서 타입을 확인해보자.
Dart에서 Generic을 사용할 때, 런타임에서 타입을 확인해보자. 종종 제네릭을 사용할 때 타입을 확인해야 할 때가 있다. 보통 나는 SharedPreferences나 JSONObject의 get함수 시리즈를 묶어버릴 때 사용하고는 한다. Kotlin에서는 Kotlin에서 JSONObject .get*의 확장 함수를 만들어봤다.와 같은 방식으로, reified를 사용해서 타입에 따른 분기를 처리했다. 아무래도 getString, getInt, gettBoolean등의 함수로 작성하면, 코드를 작성하다가 타입을 변경하기 영 귀찮았기 때문이다. 제네릭을 사용해서 함수를 이렇게 래핑하면 타입추론에 의지할수도 있어서, 아무래도 편리하다. 항상 타입추론을 맹신할 수는 없겠지만, 아무튼. Dart의 Type ..
2021.05.28 -
특정 버전의 FFmpeg를 Android용으로 크로스컴파일하는 방법 정리
zerodice0/ffmpeg-android-build 브랜치를 참고해주세요. Android NDK을 사용해서 특정 버전의 ffmpeg을 빌드하는 방법에 대해 알아봅시다. 최신 버전의 ffmpeg라면 ffmpeg-android-build의 build_android.sh/build_android_64.sh만 실행시키면 간단히 빌드되므로 굳이 이 글을 참조할 필요는 없습니다. 이렇게 별도의 브랜치를 작성하는 이유는, 최근 ffmpeg를 안드로이드 용으로 크로스 컴파일하는 방법을 검색하면 독립실행형 툴체인(Stand-alone toolchain)을 사용하는 방법만 나오기 때문입니다. 독립 실행형 툴체인은 이미 진즉에 Depreacted 됐죠. 그래서 예전 버전의 NDK를 사용하지 않으면 그 방법들로는 빌드할 ..
2021.03.31 -
[Flutter] Provider로 비동기 통신을 하여 FutureBuilder를 대체하기
저번에 작성한 FutureBuilder에 대한 연장선에 있는 글이다. 비동기 처리에 익숙하다면 당연한 내용이기도 하다. 이번에는 FutureBuilder를 사용하여 비동기 처리를 했던 코드를, Provider로 분리하여 작성하는 방법에 대해 살펴보자. Provider를 사용하여 FutureBuilder를 대체하는 이유가 있을까? FutureBuilder를 사용해서 Widget의 초기 상태값을 결정할 때는 다음과 같은 문제점이 있다. FutureBuilder의 builder에서는 항상 비동기 처리에 대한 결과값으로, Widget을 반환해야 한다. 즉, 비동기 처리가 진행되는 동안 프로그레스 바를 띄운 뒤 다른 Widget으로 이동하려고 한다면, 렌더링과 관련해서 문제가 생긴다. 비동기 처리에 대한 로직이 ..
2021.03.25 -
[Flutter] FutureBuilder를 사용해서 비동기 처리에 따라 표시되는 위젯을 구성하자.
Async/await 키워드를 사용하여 비동기를 처리하는 건, 직관적으로 코드를 작성하는 데 몹시 중요하다. 그렇다면 Widget을 생성할 때, 초기 상태로 불러올 데이터가 비동기적인 처리를 거쳐야 할 때는 어떻게 해야할까? 여기서 FutureBuilder가 등장한다. 간단하게 설명해서 FutureBuilder는 비동기적인 처리를 진행하고, 결과에 따라 표시할 Widget을 반환해준다. FutureBuilder에 대한 자세한 명세는 공식 문서를 참조하도록 하자. class Sample extends StatelessWidget { @override Widget build(BuildContext context) { return FutureBuilder( future: SharedPreference.getI..
2021.02.24 -
[Flutter] Dart:io 패키지를 사용한 Http 통신 구현 및 주의점
이 글은 dart:io library를 참조하여 작성되었습니다. 만약 문제가 발생하는 경우, 다트의 버전을 확인해주세요. dart:io 패키지를 사용하면 Http 통신을 구현할 수 있습니다. 아마 좀 더 쉽게 HTTP 통신을 할 수 있는 패키지를 사용할수도 있겠지만... 요번에는 dart:io패키지를 사용하여 HTTP 통신을 구현하는 방법과 주의해야할 사항을 정리합니다. Dart:io library를 사용한 Http 통신 구현 dart:io library 페이지를 살펴보면 다음과 같은 내용을 발견할 수 있습니다. HttpServer and HttpClient The classes HttpServer and HttpClient provide HTTP server and HTTP client function..
2021.02.04 -
비동기(Asynchronous)와 async/await, 그리고 여러개의 await에 대한 비동기 처리(Future.wait/Promise.all)
비동기(Asynchronous)에 대해 알아봅시다. 당신은 새로 들어온 직원 A군의 사수를 담당하게 됐습니다. A군이 일을 얼마나 잘 하는지 가늠이 안되는 와중에, 꽤 복잡한 일을 맡기게됐습니다. 당신은 A군이 일을 얼마나 잘 처리했는지 확인하고싶지만, 당장 맡은 일이 바빠서 신경 쓸 겨름이 없어요. 결국 당신은 A군에게 일을 맡겨놓고, '다 끝나면 나한테 말해줘요. 그거 끝나고 뭐 해야하는지 알려줄께요.'라고 말합니다. 그리고 다시 업무로 복귀한 당신. 와! 당신은 지금, A군과 비동기적으로 일하고 있어요! 비동기적으로 일한다는 건 특정 시점으로부터 하나의 작업이 완료될 때까지는 신경쓰고 있지 않다가, 그 작업이 완료되면 처리한 결과를 가지고 계속해서 진행하겠다는 의미입니다. 뭔가 문장이..
2021.01.29