본문 바로가기
반응형

전체 글338

Bloc에서 event를 await 하는 방법 그런거 없다  하지만 다른 방법은 있다. 바로 callback 을 사용하면 된다.  bloc에서 이벤트를 await 하고 싶은 목적은 아마 state 변경 이벤트를 날리고 이후 변경된 state를 이용하여 무언가를 하기 위한 것 일 것이다. 답은 간단하다. state 를 emit 한 후 콜백을 이용하여 이후 작업을 마저 수행해주면 된다.   final class MyEvent extends StudyEvent { void Function()? callback; StopStudyEvent({ this.callback, });}  myBloc.add(MyEvent( callback: () async { 하고싶은일 적으면 된다 } }));  이렇게 이벤트에 콜백을 받아와.. 2024. 8. 14.
Dart의 class modifier 간단한 정리 매번 까먹어서 유튜브에서 아주 괜찮은 영상을 찾았다.   https://www.youtube.com/watch?v=n5WuBICxv_8   아래는 요약된 코드   abstract : 클래스 구현을 다 안해도 된다base : implement를 막는다interface : extends를 막는다final : extends와 implements를 막는다   abstract interface : 다른 언어의 pure interface 만들때 사용 라이브러리 외부일경우// NormalClass can be instantiated, extended, and implementedfinal normalClass = NormalClass();class Normall extends NormalClass {} class N.. 2024. 8. 13.
Child가 Rebuild 되지 않도록 하는 원리 플러터의 위젯을 보다보면 어떤 위젯들은 리빌드 될 때 child라는 변수를 받아서 리빌드가 되더라도 child 부분은 리빌드되지 않도록 재활용 한다.  이 원리가 궁금해서 ListenableBuilder를 분석해보았다     위 코드를 보면 이 위젯은 child를 생성자에 받아서 빌더 메소드에 활용한다.빌더 메소드의 정의를 보면 다음과 같다.  여기서 우리가 알 수 있는건, 빌더 메소드는 그저 위젯을 리턴하는 평범한 함수이다. 그리고 child를 받아 이를 위젯만드는데 활용하고 있다.  간단하게 정리하자면, A라는 위젯이 외부에서 만들어진 B라는 위젯을 생성자에서 받아, 이를 빌드 메소드에 사용한다면. 이때 리빌드 되더라도 B는 다시 리빌드 되지 않는다. 걍 한마디로 외부에서 만들어서 넘겨주면 재활용이 .. 2024. 7. 23.
위젯트리에서 중간에있는 위젯만 리빌드 하고 싶을 때 이전에 적은 AnimatedBuilder와 동일한 내용이다.   AnimatedBuilder의 상속관계를 보면 ListenableBuilder를 볼 수 있다.    여기서 ListenableBuidler 코드를 확인해보면 똑같이 child를 가짐을 알 수 있다.   고로 Listenable Builder와 ValueNotifier를 조합한 뒤 재활용을 할 때 child를 이용하면 위젯트리의 중간만 리빌드 할 수 있게된다 2024. 7. 22.
애니메이션을 주고싶은데 자식위젯이 너무 많을 때 셀프로 애니메이션을 만들다가 간혹 내가 리빌드할 위젯이 자식위젯이 너무 많이 딸려 있을 때가 있다. 이럴때는 어떻게 해야 할 까?   정답은 AnimatedBuilder를 이용하는 것이다.   AnimatedBuilder에는 child 항목이 있는데 여기에 리빌드 되지 않을 위젯을 넣으면 재활용이 가능하다.    또 한가지의 팁은 Listenable에 관한 것이다.  내가 어떤 이벤트를 받을 때 플러터에서 제공하는 대부분의 그러한 클래스들은 Listenable을 상속할 가능성이 높다.  여기서 중요한건 Listenable은 AnimatedWidget에 활용이 가능하다는 점이다!!! 고로 내가 받아올 이벤트가 Listenable과 연관되어 있다면 AnimatedBuilder를 이용하는걸 고려해보자 2024. 7. 11.
SliverAppBar에 Sliver 겹치는 방법 결론부터 말하면 안된다. 찾아봤는데 방법이 없다    아니 그럼 어쩌라고?  해결방법은 직접 구현하는 것이다.   하는 방법은 다음과 같다   1. Stack위젯을 만든다2. SliverAppBar에 해당되는 부분을 Container로 만든다3. SingleChildScrollView를 그 위에 덮는다4. 스크롤뷰 탑에다가 패딩을 왕창 물려줘서 AppBar부분 밑까지 내려준다5. ScrollController를 하나 만들어 스크롤뷰에 물려준다  여기서 한가지 중요한 부분이 있다.  ScrollController는 Listenable이다 !!! 한마디로 AnimatedBuilder를 사용할 수 있다는것!!!  AnimatedBuilder의 장점은 child를 이용해 위젯트리 중간에 위젯만 리빌드하면서 애니.. 2024. 7. 11.
HRV 신호 SDNN RMSSD의 차이 기본적으로 정의는 다음과 같다.      아래는 LLM에 물어본 답변이다SDNN과 RMSSD는 모두 심박 변이도(Heart Rate Variability, HRV)를 측정하는 지표이지만, 각각 다른 측면을 나타냅니다. 이 두 지표는 심장의 자율신경계 활동을 평가하는 데 사용되지만, 그들이 측정하는 시간적 스케일과 관련된 신경계 요소가 다릅니다.SDNN (Standard Deviation of NN intervals)정의: SDNN은 모든 연속적인 NN(또는 R-R) 간격의 표준 편차입니다.측정하는 것: SDNN은 장기적인 심장 박동 간격의 변동성을 측정합니다. 이 지표는 전반적인 자율신경계의 조절 능력을 반영하며, 주로 교감신경과 부교감신경의 균형을 나타냅니다.해석: 높은 SDNN 값은 심장의 높은 변동.. 2024. 5. 22.
DSP 옛날기억 끄적끄적 1. 주파수 분석 종류 주파수 분석에서 배운 기법들은 푸리에 시리즈푸리에 트랜스폼디스크리트 타임 푸리에 트랜스폼(DTFT)디스크리트 푸리에트랜스폼(DFT)총 4개가 있었음.  푸리에 시리즈는 주기적인 신호에 사용됨 푸리에 트랜스폼은 비주기적인 신호의 주파수성분을 분석할 때 사용됨 디스크리트 타임 푸리에 트랜스폼은 샘플링한 신호를 푸리에 트랜스폼함 마지막 DFT는 DTFT를 주파수 영역에서 한번 더 샘플링함. 그래야 컴퓨터에서 표현 가능하니깐    2. 플롯 주파수 영역을 플롯할 때 절대값을 플롯하는거랑 절대값 제곱을 출력하는 방법 두가지가 있음 절대값은 Amplitude 절대값 제곱은 Power 또는 Energy와 관련되어 있음 푸리에 트랜스폼은 비주기적인 신호를 다룸. 한마디로 얘는 파워가 0임. 고로.. 2024. 5. 17.
파이썬에서 fft를 출력할때 고려해야할 사항 1. fftshift와 fftfreq 그리고 plot 매틀랩에서는 fft데이터를 flot할 때 fftshift를 한번 해주고 plot했던 기억이 있다 이유는 DFT는 주파수 0에서 다음주기 주파수까지 샘플링 하기 때문이다. 하여 원 신호의 주파수 리스폰스(데칼코마니처럼 생긴거)를 보려면, fft한 결과를 반으로 잘라서 오른쪽에있는걸 왼쪽으로 옮겨주어야 한다. 이를 fftshift함수로 이용한다.   나비로 비유하자면, fft로 계산한 결과값은 나비 왼쪽날개가 오른쪽으로 가고, 오른쪽 날개가 왼쪽으로 가있는 상태라, 이를 fftshift로 옮겨주면 된다는말    헌데 파이썬에서는 굳이 fftshift를 안하고 데칼코마니 모양으로 플롯할 수 있다. 코드상 더 깔끔하다  fftfreq는 샘플갯수와 주파수 간격.. 2024. 5. 16.
반응형