일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- Three-fiber
- react
- FirebaseAnalytics
- babel
- Redux
- RouteObserver
- Prism.js
- Game js
- Babel standalone
- web track
- Image Resize typescript
- REST API
- webrtc
- swagger-typescript-api
- Three js
- identifierForVender
- code editor
- jszip
- KakaoMap
- uint8array
- node
- Excel
- methodChannel
- typescript
- Completer
- Raycasting
- uint16array
- userevent_tracker
- Flutter
- androidId
- Today
- Total
목록Flutter (50)
Never give up
화면 이동을 tracking 하는 용도로 사용할 때 RouteObserver를 사용하면 간단합니다 void main() { runApp(MaterialApp( home: const MyApp(), navigatorObservers: [CommonRouteObserver()], )); } MaterialApp의 navigatorObservers에 등록을 해주고 RouteObserver를 상속받은 클래스의 기능을 정의해줍니다 class CommonRouteObserver extends RouteObserver { void _saveScreenView( {PageRoute? oldRoute, PageRoute? newRoute, String? routeType}) { debugPrint( '[track] sc..
먼저 UUID는 범용 고유 식별자로(쉽게 말해 특정 기기의 고유값)으로 개발을 할 때 어떤 기기에 어떤 패키지가 설치되어 있는지 등을 트래킹할 때 사용할 수 있는 고유 값 입니다 이전에 device info plus에서 가져다가 썼었는데, 필요 이상의 데이터를 가지고 왔었고 더군다나 4.0.0버전에서는 가장 필요한 친구(?)를 빼버렸습니다 Breaking change Remove AndroidId getter to avoid Google Play policies violations 구글 정책에 위반되는 부분을 피하려고 한다는데 관련 자료를 검색해보니 광고 ID관련한 부분 문제인거 같습니다 (링크 : https://support.google.com/googleplay/android-developer/ans..
위젯들을 겹쳐야되는 상황이 생길 때 대부분 stack을 먼저 떠올릴텐데 stack을 사용하지 않고도 가능한 방법이 몇가지 있습니다 그중에서 Align을 이용한 방법 그리고 무적위젯 transform을 이용한 방법을 알아보겠습니다 import 'package:flutter/material.dart'; class WidgetTest extends StatefulWidget { const WidgetTest({Key? key, required this.title}) : super(key: key); final String title; @override _WidgetTestState createState() => _WidgetTestState(); } class _WidgetTestState extends St..
ListView, SingleChildView등을 사용할 때 위젯 리스트들의 크기가 화면의 크기보다 작으면 physics에 bouncing을 넣어도 스크롤이 안되는데 속성하나만 설정하면 가능하게 할 수 있습니다 import 'package:flutter/material.dart'; class PhysicsExample extends StatefulWidget { const PhysicsExample({Key? key, required this.title}) : super(key: key); final String title; @override _PhysicsExampleState createState() => _PhysicsExampleState(); } class _PhysicsExampleState ..
많은 유저들이 사용하는 Chewie video player가 없데이트 중이어서 다른 패키지 업데이트할 때 충돌이 나기도 하고, 간단한 기능만 사용하는데 너무 많은것들(?)이 붙어 있어서 video player를 사용해서 한번 만들어봤습니다 video player widget import 'package:custom_video_player/src/util/enum.dart'; import 'package:custom_video_player/src/util/extension.dart'; import 'package:custom_video_player/src/controller/video_controller.dart'; import 'package:custom_video_player/src/view/full_..
화면을 구성하다보면 텍스트 길이 혹은 위젯 크기에 따라 유동적으로 변경하고 싶을 때 LayoutBuilder를 쓰면 간단하게 해결할 수 있습니다 먼저 LayoutBuilder의 builder 내부는 BuildContext와 BoxConstraints로 구성되어 있는데 우리가 사용할 부분은 BoxConstraints부분입니다 어떤 역할을 하는지 정말 간단하게 알아 보자면 For boxes, the constraints are BoxConstraints, which, as described herein, consist of four numbers: a minimum width minWidth, a maximum width maxWidth, a minimum height minHeight, and a maxi..
Overlay Entry는 특정 상황에서 정말 유용한 기능입니다 Flutter는 기본적으로 toast message가 없기도 하고 snackbar만으로 표현하기에는 조금 아쉬운 상황이 있다보니 Overlay Entry를 이용해서 만들면 유용할 수 있습니다 (실제로 Overlay Entry를 이용해서 개발한 toast패키지도 본적이 있습니다) 아니면 특정 위젯을 눌렀을 때 선택할 수 있는 옵션 선택형 위젯을 만들어준다던가 검색창을 만들때 밑에 히스토리를 보여준다던가 추천검색어를 보여준다던가 말이죠 근데 사용하다보면 OverlayEntry, OverlayState 셋팅 그리고 상황에 따라 위치잡기가 까다로울 수도 있습니다 그래서 필자의 삽질과 고민 그리고 구글링을 통해 정말 쉽게 구현할 수 있는 방법을 찾아..
특정 위치에 도달했을 때 스크롤을 멈추고 싶을 때 다른 방법도 있지만 scrollable을 이용하면 조금 더 편하게 작업할 수 있습니다 기본적으로 위젯의 포지션을 파악할 때 renderObject를 이용해서 위치를 계산하는데 (관련 예제 : https://devmemory.tistory.com/44) Global key를 이용해서 간단하게 원하는 포지션에서 스크롤을 멈춰줄 수 있습니다 class ScrollableExample extends StatelessWidget { ScrollableExample({Key? key, required this.title}) : super(key: key); final String title; final GlobalKey _globalKey = GlobalKey();..