인프런 커뮤니티 질문&답변

Sungmin Oh님의 프로필 이미지
Sungmin Oh

작성한 질문수

[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!

Authentication 마무리하기

로그인 로딩 중 버튼 비활성화 관련 질문입니다.

작성

·

104

·

수정됨

0

riverpod 상태 관리 시

watch 메서드를 통해 view를 변경하는데
userMeProvider를 watch하지 않고
로그인 버튼의 onPressed 내에서 read로 상태를 읽어도

비활성화가 잘 작동합니다.

제가 이해한 바로는
userMeProvider가 생성될 때 생성자의 getMe 메서드를 통해서 상태는 null이 되어있을텐데

어떻게 로그인 버튼을 누른 후 상태가 UserModelLoading으로 바뀌었을 때 view가 이를 감지하고 버튼을 disable시키는지 이해가 되지 않아 질문드립니다.

 

현재 로그인 스크린은 ConsumerStateFul 위젯입니다.

ConsumerWidget으로 변경해도 잘 작동합니다.

 

ElevatedButton(
                  onPressed: ref.read(userMeProvider) is UserModelLoading
                      ? null
                      : () => ref
                              .read(userMeProvider.notifier)
                              .login(
                                username: username,
                                password: password,
                              )
                              .then(
                            (value) {
                              if (value is! UserModelError) return;
                              ScaffoldMessenger.of(context).showSnackBar(
                                SnackBar(
                                  content: Text(value.message),
                                  duration: Duration(seconds: 1),
                                ),
                              );
                            },
                          ),
                  child: const Text('로그인'),
                ),

답변 1

0

코드팩토리님의 프로필 이미지
코드팩토리
지식공유자

안녕하세요!

read()와 watch() 함수의 차이에대해 질문하신게 맞을까요?

read() 함수는 '읽기'만 합니다.

watch() 함수는 읽으며 변수가 변경될때마다 '반응'합니다.

즉, '반응'을 해야하는데 운좋게 read()로 충분 할 때가 있을 수 있습니다.

예를들어 변경될때마다 setState()가 불린다거나 상위 어디 다른곳에서 watch()를 하고 있는경우죠.

그렇다고 '반응' 해야하는데 read()를 사용해도 괜찮은건 아닙니다.

'다른' 코드는 언제든 변경 될 수 있고 다른 코드의 변경에 대해 버그가 생길 여지가 있다면 좋은 코드가 아닙니다.

감사합니다!

Sungmin Oh님의 프로필 이미지
Sungmin Oh
질문자

다른 코드의 변경에 의해 버그가 생길 여지가 없게 만들어야 한다는 말씀이 정말 와닿네요.

감사합니다!

Sungmin Oh님의 프로필 이미지
Sungmin Oh

작성한 질문수

질문하기