로그인 로딩 중 버튼 비활성화 관련 질문입니다.
179
작성한 질문수 4
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()를 사용해도 괜찮은건 아닙니다.
'다른' 코드는 언제든 변경 될 수 있고 다른 코드의 변경에 대해 버그가 생길 여지가 있다면 좋은 코드가 아닙니다.
감사합니다!
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





