When are providers initialized?All Riverpod providers are lazy-loaded. (링크)The provider's state is initailized when the first listener is registeredEvery time the state changes, all listeners will be notified so they can update/rebuild themselvesBoth ref.watch() and ref.listen() can be used to register as a listener to a provider. This is in contrast with ref.read(), which only does a one-time r..
회사에서 Flutter로 개발한 앱과 근전도 장비는 블루투스(BLE)로 연결한다. 사용하는 BLE 라이브러리는 Flutter_Reactive_Ble 이다. 근전도 장비가 정전기나 베터리 고갈로 꺼질 경우 앱에서는 의도하지 않은 연결해제(Unintended disconnection)가 발생한다. iOS 의 경우 문제가 없이 잘 동작하지만, Android 에서는 문제가 있다. 다른 장비와 연결을 시도하면 연결이 되지 않고, 기존에 연결되었었던 장비하고만 연결이 가능하다. 우리 앱의 경우, 장비 끄기 버튼이 있는데 이 버튼을 누르면 블루투스 메시지로 장비를 꺼라는 명령을 보내고 이를 수신한 장비는 전원을 끄게 된다. 이러면 장비는 이미 꺼져있기 때문에 이후 실행되는 disconnect 명령을 OS에 보내도 장..
![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/cNDaJE/btsFHpft2v2/0jzFOgP6EaSZSMq2d4kD60/img.png)
오랜만에 컴파일을 하니 아래와 비슷한 에러가 여러개 떴다. 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, ..
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 를 활용하여 ..
TextFiled가 포커싱 되었을 때 생성되는 keyboard에 의해 가려진다면, TextField를 보이는(visible) 영역으로 가져오면(스크롤하면) 된다. 그러기 위해서는 우선 TextFiled가 scroll 가능한 widget에 쌓여져 있어야 한다. 보통 SingleChildScorllView를 이용해서 감싸고 child 에는 Column 을 이용해서, 표시하고자 하는 위젯들을 나열한다. 이 중에 TextForm filed 가 있을 것이다. 이제 keyboard가 생성되어었을때 스크롤을 얼마나 해야하는지 알아와야 한다. soft keyboard 는 system UI 이다. System UI에 의해 가려지는 크기를 받아오는 코드는 아래와 같다. MediaQuery.of(context).viewIn..
블루투스 scan 중 에 새로운 device 가 discover 되었다는 event를 받으면 호출 하는 함수를 아래와 같이 정의 하였다. ///--------------------------------------------------------------------------- /// 스캔된 장비 수 업데이트 메서드 /// - bleCommonData.isScanListUpdated 에서는 새로운 장비가 scan 되었을 때만 event 발생 /// 하고 기존에 scan 된 장비가 꺼졌을 때에 대해서는 인지하지 못하므로 이 메서드를 실행하여 update ///--------------------------------------------------------------------------- void up..
- Total
- Today
- Yesterday
- 크롬
- error
- UX
- IOS
- BLE
- 문제 해결
- plugin
- 플러터
- position
- 앱개발
- firebase
- 앱
- addPostFrameCallback
- hide
- 다트
- Bluetooth
- Syncfusion
- DART
- 에러
- 이미지
- TextField
- Flutter
- Chrome
- UI
- 인사이트
- TextFormField
- SizedBox
- 한빛미디어
- 앱 프로그래밍
- 디자인
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |