Programming(186)
-
[Flutter] Flutter에서 SharedPreferences에 저장한 값을, Android 네이티브 영역에서 참조해보자.
여기서는 Flutter 패키지 중 SharedPreferences를 지원하는 shared_preferences 패키지를 사용합니다. 다른 패키지를 사용하는 경우, 이 글의 내용은 별 다른 쓸모가 없을 가능성이 높습니다. Flutter에서의 Shared Preferences 요구사항을 구현하다보면 값을 저장해야되는 경우가 생깁니다. 복잡한 데이터라면 데이터베이스를 사용하는 방법이 좋겠지만, 간단한 플래그나 설정값 등을 저장하기 위해서 데이터베이스를 사용하긴 아무래도 부담되기 마련입니다. 이럴 때 우리는 Shared Preferences를 사용하곤 합니다. Flutter에서도 이런 요구사항은 당연히 필요하기 마련인지, shared_preferences 패키지가 제공됩니다. 이번 글에서는 shared_pref..
2021.10.28 -
[Flutter] firebase_messaging과 flutter_local_notifications을 사용한 푸시 알림 기능 구현
이번에는 파이어베이스를 사용해서 모바일 디바이스에 푸시 알림을 보내고, 알림 소리를 커스터마이징하는 방법에 대해 정리해봅니다. 대충 찾아봐도 예제가 한가득 나오는 것 같지만 굳이 정리하는 이유가 별도로 있는데요. 검색과 삽질을 통해 확인해본 결과 대부분 검색 결과가 예제에만 그쳤기 때문에, 여러 검색 결과를 머릿속에 그러모아 짜집기해서 조립한 뒤에도 삽질에 삽질을 거듭한 뒤에야 간신히 원하는 기능을 구현할 수 있었기 때문입니다. 대부분의 경우 예제만 가지고 필요한 기능을 구현할 수 있겠지만, 검색을 거듭하다 결국 변방의 이 블로그에 이르렀다는 건 삽질에 삽질을 거듭하고 있다는 증거겠죠. 혹시나 삽질에 도움이 되는 내용이 있는지 빠르게 확인할 수 있게, 어떤 순서로 진행할 건지 나열해보겠습니다. 아, 공식..
2021.10.18 -
[Flutter/Dart] 정규표현식을 사용한 문자열 검출 및 범위값 파싱
변수를 사용한 정규표현식의 활용 이번에는 정규표현식을 활용해서 1과 0으로 이루어진 문자열을 압축하는(?) 로직을 작성해보자. 나는 데이터가 기록된 문자열에서 시간을 파싱할 때 이 방법을 사용했었다. 예를 들어서 00시부터 24시까지의 문자열이 주어진다고 치면, 전체 문자열의 길이는 144자이며 한 문자는 10분의 단위시간을 가지게 된다. 정규표현식을 사용하여 문자열이 매칭되는 시작 지점과 끝 지점의 인덱스를 알아내면, 문자열로부터 데이터가 위치한 시간을 계산해낼 수 있는 셈이다. 아무튼 오늘 해볼 것은 0과 1로 이루어진 문자열에서 match를 사용하여 시작 지점과 끝 지점을 구하고, 구간 형태의 데이터로 분리해보자. 뭐, 딱히 쓸데는 없다. ' ㅈ'; 문자열 만들기 우선은 0과 1로 구성된 문자열을 ..
2021.09.13 -
[Flutter/Dart] 확장 함수를 사용한 리스트 중복 체크
확장 함수를 사용한 리스트 중복 체크 이전에 Map에 확장함수(Extension method)를 만들어보자에서 간단하게 Map의 확장함수 fetch를 만들어서, 널 처리 및 타입 변환 등의 처리를 했었다. 이번에는 확장함수를 사용해서 배열의 중복 체크를 해보자. 결과부터 확인해보자. Dartpad에서 아래의 코드를 돌려보면 정상적으로 값이 출력되는 것을 확인할 수 있다. 간단하지만 자바스크립트로 구현했을때랑은 조금 다른데, 하나씩 살펴보도록 하자. extension ListExtension on List { bool isSameListWith(List other) { bool result = true; if (length == other.length) { asMap().forEach((index, val..
2021.09.13 -
[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