
https://api.dart.dev/stable/2.2.0/dart-async/Stream-class.html
import 'dart:async';
void main() {
final controller = StreamController(); // StreamController 선언
final stream = controller.stream; // Stream 가져오기
// Stream에 listen() 함수를 실행하면 값이 주입될 때마다 콜백 함수를 실행할 수 있습니다.
final streamListener1 = stream.listen((val) {
print(val);
});
// Stream에 값을 주입하기
controller.sink.add(1);
controller.sink.add(2);
controller.sink.add(3);
controller.sink.add(4);
}
▼ 실행 결과
1
2
3
4
import 'dart:async';
void main() {
final controller = StreamController();
// 여러 번 리슨할 수 있는 Broadcast Stream 객체 생성
final stream = controller.stream.asBroadcastStream(); // asBroadcastStream() 얘를 사용해야한다.
// 첫 번째 listen() 함수
final streamListener1 = stream.listen((val) {
print('listening 1');
print(val);
});
// 두 번째 listen() 함수
final streamListener2 = stream.listen((val) {
print('listening 2');
print(val);
});
// add()를 실행할 때마다 listen()하는
// 모든 콜백 함수에 값이 주입됩니다.
controller.sink.add(1);
controller.sink.add(2);
controller.sink.add(3);
}
▼ 실행 결과
listening 1
1
listening 2
1
listening 1
2
listening 2
2
listening 1
3
listening 2
3
(
tables: [
Schedules,
],
)
class LocalDatabase extends _$LocalDatabase {
LocalDatabase() : super(_openConnection());
Stream<List<Schedule>> watchSchedules(DateTime date) =>
(select(schedules)..where((tbl) => tbl.date.equals(date))).watch(); // 데이터를 조회하고 변화를 감지
Expanded(
child: StreamBuilder<List<Schedule>>(
stream: GetIt.I<LocalDatabase>().watchSchedules(selectedDay),
builder: (context, snapshot) {
...
추후 drift를 다루는 방법도 포스팅 하겠다.
출처
https://www.youtube.com/watch?v=YojoXx383TI&t=164s
https://wikidocs.net/227916