본문으로 이동

플러터:그래프 그리기(fl chart)

학교의 모든 지식. SMwiki
Sam (토론 | 기여)님의 2025년 11월 25일 (화) 20:48 판 (새 문서: {{플러터}} == 1. 개요 == Flutter에서 실시간 그래프를 그리기 위해 **슬라이더(Slider)** 위젯으로 값을 조정하고, 이를 **그래프 라이브러리(예: fl_chart)**와 연결하는 기본 구조를 정리한 문서이다. 본 문서에서는 다음을 다룬다: * Flutter 슬라이더 기본 속성 * 슬라이더와 상태관리 기본 구조 * fl_chart 기반 실시간 그래프 예시 구조 * 상태변화와 그래프 리빌드 흐름 == 2. S...)
(차이) ← 이전 판 | 최신판 (차이) | 다음 판 → (차이)

틀:플러터 Dart:개요 플러터에 대한 지식 분류

  1. 플러터:개요
    1. 플러터:VSCode
    2. 플러터:안드로이드 스튜디오
  2. 플러터:실행
  3. 플러터:개념 잡기
    1. 플러터:화면 하나 만들기
    2. 플러터:변하는 화면(StatefulWidget)
    3. 플러터:화면 전환(화면 쌓기, 하단 네비게이션 바)
    4. 플러터:화면 전환(Drawer)
    5. 플러터:입력 관련
      1. 플러터:버튼
      2. 플러터:키보드 입력
      3. 플러터:슬라이더
    6. 플러터:그래프 그리기(fl chart)
    7. 플러터:데이터 저장(간단한 데이터)
    8. 플러터:인증(Firebase 인증)(미완)
    9. 플러터:인증(OAuth2)(미완)
  4. 권한 사용
    1. 플러터:마이크 입력
  5. 위젯
    1. 플러터:아이콘
    2. 플러터:레이아웃 계열 위젯
    3. 플러터:네비게이션 계열 위젯
    4. 플러터:버튼
    5. 플러터:상태관리(미완)
  6. 플러터:DB연결
    1. 플러터:Firebase(미완)
    2. 플러터:MySQL(미완)
  7. 디자인
    1. 플러터:테마
    2. 플러터:앱바
  8. 플러터:배포
    1. 플러터:배포(안드로이드)(미완)
  9. 플러터:참고자료
  10. 플러터:위젯
    1. 플러터:공간배치용 위젯
  11. 플러터:구글 AdMob(미완)
  12. 플러터:라이브러리
    1. 플러터:logger

1. 개요

Flutter에서 실시간 그래프를 그리기 위해 **슬라이더(Slider)** 위젯으로 값을 조정하고, 이를 **그래프 라이브러리(예: fl_chart)**와 연결하는 기본 구조를 정리한 문서이다.

본 문서에서는 다음을 다룬다:

  • Flutter 슬라이더 기본 속성
  • 슬라이더와 상태관리 기본 구조
  • fl_chart 기반 실시간 그래프 예시 구조
  • 상태변화와 그래프 리빌드 흐름

2. Slider 위젯 기본

Flutter의 `Slider`는 숫자 값을 연속 또는 단계적으로 조정할 수 있는 입력 위젯이다.

2.1. 기본 속성 목록

**value**
현재 슬라이더의 값. (double)
**min / max**
슬라이더의 최소/최대 범위를 지정
**onChanged(double value)**
슬라이더가 움직일 때 호출되는 콜백. 상태 갱신 시 사용
**divisions**
값을 단계로 제한. 예) divisions: 10 → 0~100 범위에서 10단계로 쪼개짐
**label**
`divisions`와 함께 사용 시, 현재 값을 툴팁 형태로 표시 가능
**activeColor / inactiveColor**
활성/비활성 트랙 색상
**semanticFormatterCallback**
접근성을 위한 텍스트 변환

2.2. Slider 코드 예시

``` Slider(

 value: sliderValue,
 min: 0,
 max: 100,
 divisions: 20,
 label: sliderValue.toStringAsFixed(0),
 onChanged: (v) {
   setState(() {
     sliderValue = v;
   });
 },

) ```

3. 그래프 라이브러리 선택

Flutter에서 자주 사용되는 그래프 라이브러리:

  • **fl_chart** → 가장 널리 사용됨. 커스터마이징 다양. 실시간 그래프 가능.
  • charts_flutter → 구글 제공. 구조는 안정적이나 커스텀 난이도가 약간 있음.
  • graphic → 선언적 방식. Rx-like UI.

4. fl_chart를 이용한 실시간 그래프 구조

슬라이더 값이 변경될 때마다 그래프에 표시되는 데이터 리스트를 업데이트하는 방식이 일반적이다.

흐름:

1. 슬라이더 변경 → onChanged 호출 2. 데이터 리스트에 새로운 값 push 3. 상태 업데이트 4. fl_chart가 리빌드되면서 새로운 그래프 출력

4.1. 데이터 구조 예시

``` List<FlSpot> dataPoints = [

 FlSpot(0, 0),

]; ```

슬라이더 값 변경 시:

``` setState(() {

 time++;
 dataPoints.add(FlSpot(time.toDouble(), sliderValue));

}); ```

4.2. 그래프 위젯 기본 구조

``` LineChart(

 LineChartData(
   lineBarsData: [
     LineChartBarData(
       spots: dataPoints,
       isCurved: true,
       barWidth: 3,
     )
   ],
 ),

) ```

5. 전체 구성 예시 (pseudo code)

``` double sliderValue = 50; int time = 0; List<FlSpot> dataPoints = [FlSpot(0, 50)];

Column(

 children: [
   Slider(
     value: sliderValue,
     min: 0,
     max: 100,
     divisions: 20,
     label: sliderValue.toStringAsFixed(0),
     onChanged: (v) {
       setState(() {
         sliderValue = v;
         time++;
         dataPoints.add(FlSpot(time.toDouble(), v));
       });
     },
   ),
   Expanded(
     child: LineChart(
       LineChartData(
         lineBarsData: [
           LineChartBarData(spots: dataPoints)
         ],
       ),
     ),
   )
 ],

) ```

6. 실시간 그래프 구현 시 팁

  • 데이터가 너무 많아지면 성능이 떨어질 수 있으므로 일정 개수 이상 시 앞부분 제거
  • setState 외에 Provider, Riverpod, Bloc 등을 사용하면 구조가 더 깔끔해짐
  • UI 안정성을 위해 그래프 업데이트 주기를 제한할 수도 있음 (예: 100ms마다 적용)

7. Flutter 그래프 라이브러리 비교

아래는 주요 그래프 라이브러리들의 유지보수 상태, 난이도, 특징, 공식 문서 링크를 정리한 표이다.

| | | | | | | | | | - | ----- | - | ------ | - | ------------------ | - | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | - | ----- | | 활발 | | 쉬움 | | 가장 널리 사용, 애니메이션 우수 | | [[1](https://pub.dev/packages/fl_chart) pub.dev] / [[2](https://github.com/imaNNeoFighT/fl_chart) GitHub] | | ⭐⭐⭐⭐⭐ | | | | | | | | | | | | 거의 멈춤 | | 중간 | | Material 기반, 구조 복잡 | | [[3](https://pub.dev/packages/charts_flutter) pub.dev] / [[4](https://github.com/google/charts) GitHub] | | ⭐⭐ | | | | | | | | | | | | 매우 활발 | | 중간~어려움 | | 기업용 기능 최강, 50+ 차트 | | [[5](https://help.syncfusion.com/flutter/charts/overview) Docs] / [[6](https://pub.dev/packages/syncfusion_flutter_charts) pub.dev] | | ⭐⭐⭐⭐ | | | | | | | | | | | | 활발 | | 어려움 | | D3.js 스타일 선언형 그래프 | | [[7](https://pub.dev/packages/graphic) pub.dev] / [[8](https://github.com/entronad/graphic) GitHub] | | ⭐⭐⭐ | | | | | | | | | | | | 정체 | | 쉬움 | | 간단한 곡선 그래프 | | [[9](https://pub.dev/packages/bezier_chart) pub.dev] / [[10](https://github.com/aeyrium/bezier-chart) GitHub] | | ⭐ | | | | | | | | | | | | 불규칙 | | 쉬움 | | 미니 차트용 | | [[11](https://pub.dev/packages/charts_sparkline) charts_sparkline] | | ⭐⭐ | | | | | | | | | | |

8. 다음 학습 추천

  • Stream + StreamBuilder로 그래프 자동 갱신 구조 만들기
  • 애니메이션 기능 사용한 그래프 부드럽게 업데이트
  • 여러 슬라이더를 사용한 다중 데이터 그래프 구현