회사에서 Flutter로 개발한 앱과 근전도 장비는 블루투스(BLE)로 연결한다. 사용하는 BLE 라이브러리는 Flutter_Reactive_Ble 이다. 근전도 장비가 정전기나 베터리 고갈로 꺼질 경우 앱에서는 의도하지 않은 연결해제(Unintended disconnection)가 발생한다. iOS 의 경우 문제가 없이 잘 동작하지만, Android 에서는 문제가 있다. 다른 장비와 연결을 시도하면 연결이 되지 않고, 기존에 연결되었었던 장비하고만 연결이 가능하다. 우리 앱의 경우, 장비 끄기 버튼이 있는데 이 버튼을 누르면 블루투스 메시지로 장비를 꺼라는 명령을 보내고 이를 수신한 장비는 전원을 끄게 된다. 이러면 장비는 이미 꺼져있기 때문에 이후 실행되는 disconnect 명령을 OS에 보내도 장..
오랜만에 컴파일을 하니 아래와 비슷한 에러가 여러개 떴다. Module was compiled with an incompatible version of Kotlin. The binary version of its metadata is 1.9.0, expected version is 1.5.1. 그런데 컴파일은 된다. 그래도 에러가 뜬 것때문에 찜찜해서 저 에러를 없애려고 구글링을 해보았다. https://stackoverflow.com/questions/75260986/the-binary-version-of-its-metadata-is-1-8-0-expected-version-is-1-6-0/75269801#75269801 The binary version of its metadata is 1.8.0, ..
구글 플레이 콘솔에서는 앱이 출시되었다는 메세지를 받았지만 Google Play Store 에서 이름으로 검색하면 검색이 안될 수 있다. Google Play Store는 2019년 부터 적용한 앱의 활성도에 따라 검색 노출을 결정하는 알고리즘때문이다. 일단 구글 플레이 콘솔에서 아래와 같이 앱이 정상 출시되었다는 메세지를 받았다면 앱 페이지 링크를 통해 다운을 받을 수 있다. Google Play 에서 해당 앱 페이지는 구글 플레이 콘솔의 [대시보드] 메뉴를 선택하면 아래와 같이 "Goole play에서 보기" 링크로 확인 할 수 있다. 그리고 링크를 확인하지 않더라도 출시가 되었다면, 플레이 스토어 앱 페이지 형식에 해당 앱의 패키지 이름을 입력함으로써 앱 페이지를 접근할 수도 있다. 패키지 명은 m..
구글 플레이 콘솔에서 앱 출시를 위해 테블릿용 스크린샷을 입력할 때는 그냥 테블릿 PC에서 탭쳐한 스크린샷을 입력하면 된다. 하지만 앱 스토어 커넥트에서 앱 출시를 위해 테블릿용 스크린샷은 정해진 규격이 있다. 필수 사이즈는 2048x2732 또는 2732x2048 픽셀의 PNG 또는 JPEG 이어야 한다 (JPG 확장자일 경우 에러남...확장자를 JPEG 로 변경해줘야함) 이 크기의 스크린샷을 저장해주는 것은 iPad Pro 2세대, 3세대 뿐이다. 다른 장비는 이보다 작은 사이즈의 스크린샷이 저장된다. 회사에서 사용하고 있는 iPad Pro 11(4세대) 로 스크린 샷을 찍으면 2388x1668 로 저장된다. 따라서 앱 스토어 커넥트에 요구하는 스크린샷을 업로드하기 위해서는 캡쳐한 스크린샷을 이용해서..
이제 Flutter 입문서 마지막 책이다. 지금까지 본 책중에서 내용이 가장 알차다. 그렇다고 물론 초보가 이 책 한권을 본다면 다른 책을 안봐도 되는 것은 아닌 것 같다. 최소한 Do It 정도는 더보는 것을 추천한다. 이 두권을 보더라도 실제 앱을 짤 때에는 궁금하거나 모르는 부분이 무수히 나올텐데 이때부턴 구글링이 최고다. 몰랐던 부분, 기억하고 싶은 내용 다트 네이티브 플랫폼은 JIT(Just In Time) 컴파일 방식과 AOT(Ahead of TIme)컴파일 방식을 이용한다. JIT 컴파일 방식은 다트 가상 머신에서 제공하는 기능으로 코드의 변경된 사항을 처음부터 다시 컴파일 할 필요 없이 즉시 화면에 반영할 수 있는 핫 리로딩 기능, 실시간으로 메트릭스를 확인할 수 있는 기능 디버깅 기능을 ..
main() 에서 아래의 코드를 추가하면 시스템 UI 인 status bar(top) 와 navigation bar( bottom) 이 숨겨진 채로 Full screen에 대해서 앱의 UI 가 표시된다. SystemChrome.setEnabledSystemUIMode(SystemUiMode.manual, overlays: []); 그런데 앱 실행중에 status bar, navigation bar 가 생성될 수 있는 제스쳐를 취하게 되면 숨겨두었던 system UI 가 나타나면서 UI 가 overflow 될 수 있다. 이를 감지해서 다시 system UI 를 숨겨 두기 위한 코드도 추가해 두었었다. system UI 를 감지하고 2초 후에 다시 원래 상태로 되돌리는 명령이다. SystemChrome.se..
버튼을 누르면 생성되는 팝업창의 위치를 버튼과 연관 되게 만들고 싶을 때, 버튼을 눌렀을 때 RenderBox 로 해당 버튼의 rending 관련 정보를 가져온뒤 offset 값을 화면애 대한 절대값으로 변환하여 이값을 기반하여 생성될 popup 창의 위치를 결정하는 파라미터에 넣어주면 된다. onPressed: (){ final RenderBox renderBox = context.findRenderObject() as RenderBox; final offset = renderBox.localToGlobal(Offset.zero); final left = // offset.dx 를 활용하여 popup 창의 왼쪽위 모서리 x좌표 값 계산하여 입력 final top = // offset.dy 를 활용하여 ..
- Total
- Today
- Yesterday
- SizedBox
- TextField
- 다트
- BLE
- error
- Bluetooth
- 인사이트
- addPostFrameCallback
- 디자인
- 앱개발
- 이미지
- plugin
- position
- Syncfusion
- UI
- 앱 프로그래밍
- Chrome
- 에러
- firebase
- 플러터
- 한빛미디어
- DART
- 앱
- Flutter
- hide
- 문제 해결
- UX
- IOS
- TextFormField
- 크롬
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |