섹션3 - Tile 강의 질문
SettingBottomSheet에서 ThemeServices는 context.read해도 되고, LangService는 context.watch로 해야하는 이유가 무엇인가요? toggleLang, toggleTheme 함수 안에서 똑같이 notifyListeners를 호출하는데 무슨 차이가 있는지 궁금합니다.
답변 1
1
안녕하세요.
먼저 context.read와 context.watch의 차이점은 다음과 같습니다.
context.read:notifyListeners를 호출해도 BuildContext가 소속된 Widget을 갱신 안함context.watch:notifyListeners를 호출하는 경우 BuildContext가 소속된 Widget을 갱신함
아래 SettingBottomSheet 코드를 보면, LanguageService는 context.watch로 접근하고 있기 때문에 toggleLang에서 notifyListeners 호출시 갱신됩니다.
class SettingBottomSheet extends StatelessWidget {
const SettingBottomSheet({super.key});
@override
Widget build(BuildContext context) {
final bool isLightTheme = context.theme.brightness == Brightness.light;
final LangService langService = context.watch();
return BaseBottomSheet(
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
/// Theme Tile
Tile(
icon: isLightTheme ? 'sunny' : 'moon',
title: S.current.theme,
subtitle: isLightTheme ? S.current.light : S.current.dark,
onPressed: context.read<ThemeService>().toggleTheme,
),
/// Lang Tile
Tile(
icon: 'language',
title: S.current.language,
subtitle: IntlHelper.isKo ? S.current.ko : S.current.en,
onPressed: langService.toggleLang,
),
],
),
);
}
}ThemeService는 context.theme.brightness로 접근하고 있는데, theme_service.dart 파일에 ThemeServiceExt를 보면, 결국 context.watch<ThemeService>().theme.brightness와 동일한 코드이므로 마찬가지로 toggleTheme 함수에서 notifyListeners 호출시 위젯이 갱신됩니다.
extension ThemeServiceExt on BuildContext {
ThemeService get themeService => watch<ThemeService>();
AppTheme get theme => themeService.theme;
AppColor get color => theme.color;
AppDeco get deco => theme.deco;
AppTypo get typo => theme.typo;
}
감사합니다 :)
수강 기한 연장 요청드려도될까요..
1
48
2
37.provider 실습 문제점, 카트에서 상품이 지워지지 않습니다.
1
75
2
다트 프로젝트
1
51
2
context.read<LangService>().toggleLang 해도 언어가 변경되는 이유
1
74
3
수강 기간 연장 신청 요청드립니다.
1
68
3
수강기간 연장 부탁드립니다.
1
58
3
제공해주신 flutter_design_system 라이브러리 질문입니다.
1
53
2
수강 기간 연장 부탁드립니다
1
52
2
수강 기한 연장
1
78
3
강의 잘 보고있습니다!
1
59
2
애뮬레이터 실행 오류
1
69
2
pdf 강의노트
1
62
2
수강기간 연장 부탁드립니다.
1
86
2
수강 기간 연장 요청
1
86
2
수강기간 연장 부탁드립니다
1
129
2
코드 생성기 - build runner 관련 오류
1
111
1
디자인 시스템 구성에 대해 질문 드립니다
2
145
2
CartItem 추가시
1
95
2
const 커스텀클래스
1
95
1
강의 수강 기간 연장 요청드립니다.
1
127
2
코드 생성기 - 실습 build runner 안 되는 분.
1
270
2
Flutter 강의자료 열리지 않는 문제
1
165
2
riverpod 프로젝트에 궁금한점이 있어 질문 남깁니다.
1
123
2
수강 기강 연장 부탁드리겠습니다! :ㅇ
1
88
2





