flutter(27)
-
[Flutter] Map에 확장함수(Extension method)를 만들어보자
Map의 확장함수 tryGet를 만들어보자 이미 이전에 Kotlin을 사용하면서 Kotlin에서 JSONObject .get*의 확장 함수를 만들어봤다.라는 글을 작성한 적이 있다. JSONObject를 참조할 때마다 매번 getInt(), getString()처럼 타입에 맞는 메소드를 호출해야했는데, 주어진 데이터에 따라 타입캐스팅 예외가 발생할 위험성이 있기 때문에 만든 확장함수였다. 이번에는 Dart의 확장함수에 대해 정리해보고, Map의 인자에 접근하기 위한 확장함수를 만들어보도록 하자. 확장 함수(Extension methods) Dart 2.7부터 지원하기 시작한 확장 메소드(Extension methods)를 사용하면 제공되는 라이브러리에 기능을 추가할 수 있다. 자세한 내용은 Extensi..
2021.08.19 -
[Flutter] 여러개의 비동기 처리에 대한 경쟁 상태의 처리
여러개의 비동기 처리에 대한 경쟁 상태의 처리 Dart에서는 Future 클래스를 사용해서 비동기에 대한 처리를 할 수 있습니다. async/await에 대한 내용은 비동기(Asynchronous)와 async/await, 그리고 여러개의 await에 대한 비동기 처리에서 한 차례 언급했으므로, 이번에는 가볍게 패스할께요. 이번에 살펴볼 내용은 여러개의 비동기 처리가 경쟁 상태(Race condition)로 주어졌을 때, 어떻게 처리하는지에 대한 얘기를 해보려고 합니다. 엥? 비동기에 경쟁 상태? 그거 Future.any() 호출하면 끝 아니냐? Dart의 dart:async 패키지에서 제공하는 Future패키지에는 Future.any라는 메소드를 제공합니다. Future.any(Iterable futu..
2021.07.27 -
[Flutter] 도로명 주소 검색하기 / Daum Postcode Search Package 배포기
Flutter로 도로명 주소 검색하기 때는 바야흐로 2021년 초여름, Flutter를 사용하고 있던 프로젝트에 위치를 지정해줘야하는 요구사항이 생겼습니다. 지도를 이용해서 위도와 경도를 저장하는 방법과, 주소를 이용해서 저장하는 방법 중 어떤 방법을 사용할지에 대해 고민한 결과... 시간도 얼마 안남았으니 일단 간단해보이는 녀석을 먼저 하자는, 나름대로 합리적인 듯 보이지만 실제로는 별 생각없는 방법으로 결정을 내리고 방법을 찾기 시작합니다. 카카오에서 제공하는 API를 사용하자 놀랍게도 카카오에서 제공하는 다음 우편번호 서비스를 사용하면, Key를 발급받을 필요도 사용량에 제한이 걸리는 일도 없이 도로명 주소를 검색하는 게 가능합니다. 와! 편리해! 이 정도면 누군가 라이브러리로 만들어놓지 않았을까,..
2021.07.26 -
[Flutter] Dart에서 Generic을 사용할 때, 런타임에서 타입을 확인해보자.
Dart에서 Generic을 사용할 때, 런타임에서 타입을 확인해보자. 종종 제네릭을 사용할 때 타입을 확인해야 할 때가 있다. 보통 나는 SharedPreferences나 JSONObject의 get함수 시리즈를 묶어버릴 때 사용하고는 한다. Kotlin에서는 Kotlin에서 JSONObject .get*의 확장 함수를 만들어봤다.와 같은 방식으로, reified를 사용해서 타입에 따른 분기를 처리했다. 아무래도 getString, getInt, gettBoolean등의 함수로 작성하면, 코드를 작성하다가 타입을 변경하기 영 귀찮았기 때문이다. 제네릭을 사용해서 함수를 이렇게 래핑하면 타입추론에 의지할수도 있어서, 아무래도 편리하다. 항상 타입추론을 맹신할 수는 없겠지만, 아무튼. Dart의 Type ..
2021.05.28 -
[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