## 학습 목표
이 튜토리얼을 통해 Dart의 Stream과 Future를 사용해 실시간 데이터 처리 기능을 구현할 수 있는 역량을 갖춥니다.
## 준비사항
- Flutter SDK 설치 및 Android Studio 또는 VS Code 설정
- 기본적인 Dart 문법 이해 (함수, 클래스, 제어문)
- flutter pub add streamz 또는 dart:stream 라이브러리 사용 경험
## 단계별 진행
### 1단계: 기초 설정
Stream과 Future의 기본 개념을 학습하고 간단한 예제를 실행합니다.
### 2단계: 핵심 구현
StreamController를 활용해 실시간 데이터 흐름을 관리하고, FutureBuilder로 비동기 데이터 로딩을 처리합니다.
### 3단계: 고급 기능
Stream과 Future의 조합으로 복잡한 데이터 처리 로직을 구현하고, 에러 처리 및 무한 스트림 처리를 적용합니다.
### 4단계: 완성 및 테스트
실제 앱에 통합해 UI 반응성을 검증하고, 성능 최적화 기법을 적용합니다.
## 다음 학습 단계
- Isolate 활용한 백그라운드 작업 구현
- Riverpod 또는 Bloc으로 상태 관리 확장
- WebSocket을 이용한 실시간 데이터 통신
🎯 Dart에서 Stream과 Future 활용하여 실시간 데이터 처리하기
Dart 튜토리얼
중급
난이도
튜토리얼
타입
11/02
등록일
Dart에서 Stream과 Future 활용하여 실시간 데이터 처리하기
중급태그
코드 예제
// 1단계: Stream 기본 사용
import 'dart:async';
void main() {
final stream = Stream.fromIterable(["A", "B", "C"]);
stream.listen((data) => print('받은 데이터: $data'));
}
// 2단계: FutureBuilder 활용
import 'package:flutter/material.dart';
import 'dart:async';
class FutureBuilderExample extends StatelessWidget {
final Future<String> _future = Future.delayed(Duration(seconds: 2), () => "완료");
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text('FutureBuilder 예제')),
body: Center(
child: FutureBuilder<String>(
future: _future,
builder: (context, snapshot) {
if (snapshot.hasData) return Text(snapshot.data!);
return CircularProgressIndicator();
},
),
),
);
}
}
// 3단계: Stream + Future 결합
import 'dart:async';
Stream<String> dataStream() {
final controller = StreamController<String>();
Timer(Duration(seconds: 3), () => controller.add("데이터 전송됨"));
return controller.stream;
}
Future<void> processData() async {
try {
final result = await dataStream().first;
print('처리 결과: $result');
} catch (e) {
print('에러 발생: $e');
}
}
// 4단계: 실시간 UI 통합
import 'package:flutter/material.dart';
class RealtimeDataScreen extends StatefulWidget {
@override
_RealtimeDataScreenState createState() => _RealtimeDataScreenState();
}
class _RealtimeDataScreenState extends State<RealtimeDataScreen> {
final StreamController<String> _controller = StreamController();
String _latestData = '기본 데이터';
@override
void initState() {
super.initState();
Timer.periodic(Duration(seconds: 2), (_) => _controller.add(DateTime.now().toString()));
_controller.stream.listen((data) {
setState(() => _latestData = data);
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text('실시간 데이터')),
body: Center(child: Text(_latestData)),
);
}
}
등록일: 2025년 11월 02일 02:50
언어 정보
언어
Dart
카테고리
Mobile
인기도
#15
학습 팁
코드를 직접 실행해보세요
변수를 바꿔가며 실험해보세요
오류가 나도 포기하지 마세요
다른 예제도 찾아보세요