자식 위젯이 버튼인데 버튼에서 실행하는 메서드도 자식 위젯에 정의가 되어있었다. 이것을 부모 위젯의 어느 버튼을 눌렀을 때도 호출이 될 수 있도록 연결 해야 한다. 글로벌키를 이용하는 방법이 가장 간단하겠지만, 왠지 직접 전역 변수를 선언하고 싶지는 않다...좀더 세련된 방법이 없을까? 바로 떠오르지 않아 구글링을 해보니 쉽게 찾을 수 있었다. typedef 을 사용하는 방법 Parent 쪽에 함수를 연결 할 수 있는 변수 y를 정의 해주고 parent의 버튼에서 이 함수 변수를 호출 (y.call) 하도록 만들어 둔다. 그리고 parent 에서 child를 생성할때 함수를 파라미터로 받아 parent의 함수 변수 y 에 연결하는 익명함수를 전달한다. 이 익명 함수를 전달 받은 child 에서는 ..
기존에 작성한 코드에서 Riverpod 의 StateProvider 를 이용한 것이 있는데, 이 코드를 Riverpod Generator 를 활용하는 코드로 migration 하려고 보았더니 Generator 에서는 State Provider는 지원하지 않는다. 어떤 질문자가 아래와 같이 문의를 했는데, 레미의 답변은 제네레이터에서 StateProvider 같은 것을 추가할 계획은 아직 없고,사용할 State를 Class 로 선언하고 이 클래스를 이용하여 Notifier 로 프로바이더를 만들어야 한다고 한다. 간단한 예제는 아래 링크에서 참고하면된다 https://codewithandrea.com/articles/flutter-riverpod-async-notifier/#notifier-with-ri..
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 를 활용하여 ..
현재 만들고 있는 앱의 디자인이 Bottom Navigation Bar (system UI) 와 어울리지 않아서 숨겨 두었다. main 함수에 아래와 같이 추가하면 숨겨진다 문제는 이 엃게 숨겨진 bottom navigation bar 가 영원히 숨겨지는게 아니란 것이다. 사용자가 터치스크린의 bottom edge에서 위쪽으로 swipe하면 다시 나타난다. 그리고 이로 인해 bottom 에 overflow가 발생한다. 이 문제를 해결하기 위해 구글링을 해보았다. 나와 같은 문제를 겪은 사람들이 몇몇 보이지만 완벽하게 해결할 수 있는 방법은 없는 듯하다. (몇 명 보이지 않는 이유가 화면 구성시 이러한 문제가 발생하지 않게끔 해주는 widget 이나 structure 가 있는지도 모르지....) 하나 찾은..
앱 개발을 하면서 iOS 장비로 iPhone 6+ 와 iPhone Xs 를 사용하고 있다. 그리고 프로그래밍은 Mac mini(M1) 을 이용하고 있다. iPhone Xs 를 사용하게 된건 최근의 일인데, 그전까지 6+ 로 테스트를 했었다. 앱을 빌드하고 6+에 설치가 되면 이후에도 언제든 (Mac min 와의 연결을 하지 않은 상태에서도) 개발 과정에서 설치한 앱이 실행되었다. 그런데 Xs 는 안드로이드 스튜디오에서 run 을 하면 빌드하고 설치된 뒤 실행할 때는 정상 동작이 되는데, 테스트가 끝나고 연결(라이트닝 케이블 연결 제거)을 해제한 뒤 앱을 실행하기 위해서 아이콘을 터치하면 실행이 되지 않는다. iPhone 6+ 는 iOS 버전 12.x 이고, Xs는 iOS 버전이 16.2 다. 찾아보니 i..
지금 개발하는 앱에서 그래프를 그릴 때 저장된 모든 데이터를 그리도록 하고 있다. 15분을 측정한 데이터의 경우 데이터 샘플 수가 22500개 정도 된다. 초당 25개의 샘플을 저장하기 때문에 3분만 측정을 해도 4500개가 된다. 그렇다보니 syncfusion 에서 제공하는 open source 로 그래프를 나타내고 있는데, 그래프를 화면에 그리는데 긴 시간이 걸린다. 15분 측정 데이터를 화면에 뿌리려고 하니 10초 이상의 로딩 타임이 걸리는 것을 확인 했다. 어떻게 하면 이것을 줄일 수 있을까 싶어서 검색해보았다. 참고 자료 1. https://www.syncfusion.com/forums/175573/high-amount-of-data-points-block-the-whole 이 자료에서 질문자는..
- Total
- Today
- Yesterday
- plugin
- DART
- Flutter
- 문제 해결
- IOS
- 앱 프로그래밍
- 크롬
- error
- UI
- Syncfusion
- TextFormField
- 다트
- 이미지
- BLE
- hide
- Bluetooth
- 인사이트
- firebase
- 한빛미디어
- 디자인
- 에러
- UX
- 앱개발
- SizedBox
- 플러터
- Chrome
- TextField
- position
- addPostFrameCallback
- 앱
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |