The Dart int type is a 64-bit two's complement number—except when compiled for the web, there it's a 64-bit floating point number with no fractional part (a JavaScript number which has an integer value). How those values are represented internally depends on optimizations, they can be represented as something smaller if the runtime system knows for sure that the value will fit. That's an optimiz..
앱에서 버튼음과 같은 효과음을 넣기 위해 audioplayers 패키지를 사용했다. 하지만 자잘한 문제들이 있어, 나중에 기억 못할 까봐 남겨보려 한다. 1. PlayerMode .lowLatency 를 사용할 경우, 불편한 로그 메시지들이 쭈~~~욱 audioplayer의 setPlayMode와 관련하여 소스코드 주석을 보면, 낮은 지연을 위해서는 lowLatency모드를 사용하라고 되어있지만 실제로 적용해서 돌려보면 많은 log 메세지를 남긴다. 앱은 돌아가지만 뭔가 boundary를 넘어섰다고 하고, 어쩌고 저쩌고...은근 신경 쓰인다. 이걸 고칠 방법이 있나 찾아보니, 아래글에서처럼 lowLatency 쓰지 말란다. 참고 자료: https://github.com/bluefireteam/audiop..
앱에서 저장할 수 있는 공간은 두가지로 나뉜다. internal storage와 external storage. internal storage는 해당 앱만 접근할 수 있는 저장 공간이다. 따라서 컴퓨터에 장치를 연결하고 파일 탐색기로 들어가보아도 이 공간에는 접속 할 수 없다. external storage는 해당 앱 뿐만아니라 다른 앱 또는 외부에서 접근이 가능한 공간이다. 즉, 파일 탐색기로 확인이 가능하다. 내가 원하는 것은 external storage에 저장하여 파일 탐색기를 통해 파일을 들여다 보거나, 가져올 수 있는 것이다. 조금 더 추가하면 모바일폰이나 태블릿을 컴퓨터에 연결 했을 때, 아래와 같은 폴더 중 한 곳에다가 앱에서 생성한 파일을 저장 하는 것이다. 플러터에서 external s..
Text 위젯에서는 표시할 text의 fonSIze 설정할 수 있다. 이때 Text위젯을 감싸는 위젯의 높이(height)가 지정되어있지 않을때 자신의 child, 지금의 경우 Text 위젯의 크기를 따르게 된다. 만약 Text 위젯도 높이(height)가 정해져 있지 않을 경우 Text Widget은 표시할 text의 크기에 비례해서 커지게 된다. 이에 따라 Text위젯을 감싸는 위젯(내 경우 SizedBox)도 크기가 따라 커지게 된다. 위와 같이 간단한 코드를 통해 테스트 해보자. fontSize 값은 코드에서처럼 100을 넣었다. 한글은 '한뀰' 영어는 'Rg' 를 입력했다. SizedBox의 height는 아래 사진과 같이 Flutter Dev tool의 Flutter Inspector를 이용해..
앱을 제작하다보니 앱의 현재 화면이나 화면의 일부 위젯을 이미지로 저장하기 필요한 패키지는 아래와 같다. # 특정 위젯 screenshot 을 위한 패키지 screenshot: ^1.2.3 path_provider: ^2.0.11 permission_handler: ^9.2.0 image_gallery_saver: ^1.7.1 share_plus: ^4.0.9 screenshot 패키지는 flutter에서 원하는 widget tree 혹은 전체 UI를 캡쳐 할 수 있다. 이때 캡쳐한 이미지를 저장하기 위해서 path_provider 패키지를 이용해서 저장할 directory를 쉽게 받아올 수 있다. permission_handler 는 이미지 저장시, 현재 프로젝트에 할당된 디렉토리 이외의 곳에 저장하려..
패턴책을 볼때 알게된 Singletone. 플러터를 이용해 Bluetooth를 연결하기 위해서 코딩하는 중에 마주쳤다. 현재 Bluetooth를 사용하기 위한 라이브러리로 flutter_blue_plus를 사용하고 있는데 여기서 클래스 정의 내부를 보면 아래와 같이 singletone 이다. 핸드폰에 Bluetooth 모듈이 하나가 있기 때문에, 하나의 instance 만 가지고 있어야 해서 그렇다. 비슷한 방식으로 아래처럼 get 대신에 factory를 이용할 수 도 있다. 결과를 보면 singletone 프린트문은 한번만 실행됬고, a 와 b는 같은 클래스 인스턴스를 가지고 있는 것을 볼 수 있다.
현재 만들고 있는 앱은 Bluetooth를 이용해서 근전도 측정 장치와 통신을 한다. 앱을 Flutter로 제작하고 있기 때문에 Bluetooth와 연결을 위한 라이브러리를 써야한다. 장치와 통신하는 방식은 정확하게 말하면 Bluetooth low energy (BLE)이다. Bluetooth classic과는 다른 메커니즘을 사용하고 있다. BLE를 위한 Flutter 라이브러리를 Pub.dev에서 찾아보면 3개이상이 있는 것을 확인 할 수 있다. 이 중에서 활발히 업데이트되고 있는 라이브러리가 2개이다. 하나는 필립스 휴에서 조명(LED)을 컨트롤하기위해 제작한 flutter_reactive_ble 이고, 다른 하나는 flutter_blue_plus 이다. flutter_blue_plus는 이전에 많..
버튼을 클릭하면, 15초 후에 사라지는 dialog를 생성하고 싶었다. 그래서 dialog의 initState()에 Timer.periodic 을 실행하도록 하고, 이 타이머에서 15초가 되면 callback하는 함수에서 창을 닫는 (아래 코드처럼)명령을 주었다. 그랬더니 context 빨간 줄이 생기면서, initState에서 context를 사용할 수 없다는 설명이 떴다. 'initState context'를 검색해보니 context는 initState 이후에 사용할 수 있다고 한다. 그래서 해결 방법을 보니 아래 링크처럼 Future.delayed를 사용하면 된다고 한다. 그래서 따라 해보았다. https://stackoverflow.com/questions/49457717/flutter-get-c..
- Total
- Today
- Yesterday
- Chrome
- 이미지
- TextFormField
- 크롬
- hide
- addPostFrameCallback
- UX
- 인사이트
- Bluetooth
- 한빛미디어
- BLE
- 앱 프로그래밍
- UI
- 에러
- 플러터
- 디자인
- IOS
- firebase
- TextField
- error
- SizedBox
- 앱개발
- plugin
- 문제 해결
- Syncfusion
- 다트
- position
- 앱
- Flutter
- DART
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |