inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

Authentication 마무리하기

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

179

Sungmin Oh

작성한 질문수 4

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('로그인'),
                ),

flutter 하이브리드-앱

답변 1

0

코드팩토리

안녕하세요!

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

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

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

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

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

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

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

감사합니다!

0

Sungmin Oh

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

감사합니다!

Isar 마지막 업데이트는 2년전입니다.

0

34

0

FlutterSecureStorage 질문

0

33

0

Dio onError Interceptor 만드는 부분에 질문이 있습니다.

0

80

2

관리자 기능에 대한 질문

0

100

2

part 'restaurant_model.g.dart';

0

93

1

36강. dio 인터셉터에 storage를 전달하는 코드가 이해 안되는데요. 도움 부탁드립니다.

0

56

2

2번 반환 상황 관련 질문

0

63

2

riverpod 3.0

0

143

2

Asset folder??

0

85

2

디자이너와 협업 시 프레임 크기 설정 관련 질문

0

117

2

FutureProvider, StateNotifierProvider 선택 기준

0

71

2

컴포넌트 모델화

0

66

2

쿼리 파라미터

0

86

2

화면 안보임

0

72

2

PaginationListView

0

55

1

강의중 37.Dio onErrorInterceptor 작업하기 dio 관련 질문입니다.

0

104

2

프로토타입이미지

0

63

2

여러 객체를 상태 관리하는 방법에 대한 질문

0

86

2

장바구니 결제하기 응답이 500이 옵니다.

0

106

2

removeFromBasket에서 await patchBasket()을 마지막에 하면 에러나는거 아닌가요?

0

68

2

이 두가지는 완전히 동일한 기능인가요?

0

107

3

내부 코드를 작성하지 않은 CursorPaginationLoading가 어떻게 로딩상태를 갖는지 잘 모르겠습니다...

0

79

2

_SplashScreenState에서 storage를 late로 호출해서 한번만 불러와도 되나요?

0

88

2

코딩 작성 순서 관련 질문

0

88

2