- Stream 타입만 반환가능하다.
- API 요청 결과를 Stream으로 반환 할 때 자주 사용한다.
Socket등...
생성하기
- 길이가 3인 리스트에 각각의 값을
i
를 곱해가는 Provider
를 생성한다.
import 'package:flutter_riverpod/flutter_riverpod.dart';
final multipleStreamProvider = StreamProvider<List<int>>(
(ref) async* {
for (int i = 0; i < 10; i++) {
await Future.delayed(Duration(seconds: 1));
yield List.generate(3, (index) => index * i);
}
},
);
사용하기
futureProvider
와 마친가지로 when을 사용해서 코드를 작성한다.
- watch를 통해서 provider 값이 변경될 때마다 build가 재실행 되면서 값이 반영된다.
futureProvider
처럼 데이터가 캐싱된다.
class StreamProviderScreen extends ConsumerWidget {
const StreamProviderScreen({Key? key}) : super(key: key);
@override
Widget build(BuildContext context, WidgetRef ref) {
final state = ref.watch(multipleStreamProvider);
return DefaultLayout(
title: 'StreamProviderScreen',
body: Center(
child: state.when(
data: (data) => Text(
data.toString(),
),
error: (err, stack) => Text(
err.toString(),
),
loading: () => CircularProgressIndicator(),
),
),
);
}
}