22. SetState 메소드를 활용한 상태관리 단점
전역상태 관리
특정 위젯 내에서만 사용하는
상태를 다루는 곳에서
적합합니다. 뷰 전체나 앱
전체에 영향을 미치는 상태를
관리하는데 한계가 있습니다.
복잡한 상태 관리
페이지 내 여러 상태가
상호작용하는 복잡한 UI를
구성할 때, 코드 구성 또한
복잡해질 수 있습니다.
최적화 문제
setState 메소드는 관련된
위젯트리 전체를 재구성하기
때문에, 크고 복잡한
위젯트리에서는 불필요한
렌더링이 발생할 수 있습니다.
27. import 'dart:async';
/// Class which exposes a `tick` method to emit values periodically.
class Ticker {
/// Emits a new `int` up to 10 every second.
Stream<int> tick() {
return Stream.periodic(const Duration(seconds: 1), (x) => x).take(10);
}
}
ticker.dart
28. part of 'ticker_bloc.dart';
abstract class TickerEvent extends Equatable {
const TickerEvent();
@override
List<Object> get props => [];
}
...
class _TickerTicked extends TickerEvent {
const _TickerTicked(this.tick);
final int tick;
@override
List<Object> get props => [tick];
}
ticker_event.dart
29. part of 'ticker_bloc.dart';
abstract class TickerState extends Equatable {
const TickerState();
@override
List<Object> get props => [];
}
class TickerInitial extends TickerState {}
ticker_state.dart
30. class TickerTickSuccess extends TickerState {
const TickerTickSuccess(this.count);
final int count;
@override
List<Object> get props => [count];
}
class TickerComplete extends TickerState {
const TickerComplete();
}
ticker_state.dart
38. @riverpod
Future<List<Package>> fetchPackages(
FetchPackagesRef ref, {
required int page,
String search = '',
}) async {
final dio = Dio();
// Fetch an API. Here we're using package:dio, but we could use anything else.
final response = await dio.get<List<Object?>>(
'https://pub.dartlang.org/api/search?page=$page&q=${Uri.encodeQueryComponent(search)}',
);
// Decode the JSON response into a Dart class.
return response.data?.map(Package.fromJson).toList() ?? const [];
}
40. Immutable State
데이터 일관성 유지
상태가 예측 가능한
방식으로만 변경될 수
있습니다.
버그 감소
상태 변경으로 인한 부작용
(side-effect)을 줄일 수
있습니다.
개발 효율성 향상
상태 변경을 추적하기 쉬워
디버깅이 용이합니다.
41. Clear Separation of Concerns
가독성 향상
코드를 더 이해하기 쉬워지고,
관리가 용이합니다.
유지보수성 향상
각 모듈이 독립적으로
작동하므로, 한 부분의 변경이
다른 부분에 미치는 영향을
최소화합니다.
재사용성 향상
독립적으로 작동하는 모듈은
다른 프로젝트에서도 재사용이
가능합니다.
42. 상태 관리를 통해 UI 로직과 비즈니스
로직을 분리할 수 있습니다.
Clear Separation of
Concerns