-
카테고리
-
세부 분야
모바일 앱 개발
-
해결 여부
미해결
편집 기능에서 색상 설정 질문
22.09.12 21:38 작성 조회수 107
0
viewModel.onEvent(AddEditNoteEvent.changeColor(widget.note!.color));
initState에서 위의 코드를 넣어주었습니다. 하지만 initState에서 notifyListners()를 호출해서 그런지 state 오류가 발생합니다.
제 머리로 생각할 수 있는 대안은
changeColor에 파라미터로 isRebuild 라는 bool 값을 받아서
기본 값을 true 해놓고, true일 때만 notifyListeners가 호출되게 하였습니다.
이렇게 플래그를 주는게 좋은 방법일까요?
아니면 다른 키워드 주실 수 있을까요?
답변을 작성해보세요.
0
오준석
지식공유자2022.09.12
플래그가 코드 복잡성을 올리는 것 같으니
가장 좋은 대안은 화면을 Navigation.push 하기 전에 ViewModel에 색깔을 지정한 후에 화면을 이동하면 되지 않을까요.
atomom
2022.09.12
그 방법은 생각하지 못했었네요. 그러면
note_screen의 gestureDetector 부분에
final addEditNoteViewModelViewModel = context.read<AddEditNoteViewModel>();
addEditNoteViewModelViewModel.onEvent(AddEditNoteEvent.changeColor(note.color));
위의 2줄 코드를 추가해주면 될까요?
혹시 그러하다면 한 스크린에 이렇게 다른 viewModel을 호출해도 상관이 없을까요?
오준석
지식공유자2022.09.12
ViewModel 을 앱 전체에서 하나의 인스턴스만 가지는 싱글턴으로 사용하기 때문에 문제 없을 것 같습니다.
더 나은 방법은 화면 이동시마다 ChangeNotifierProvider 설정을 새로 하여 ViewModel이 항상 새롭게 생성되도록 하는 방법도 있겠습니다. 이 때 ViewModel 생성시 노트 컬러를 생성자로 전달하는 방법이겠지요.
오준석
지식공유자2022.09.13
대략 이런 느낌으로 작성하면 매번 새로운 ViewModel을 생성하게 됩니다.
Navigator.push(
context,
MaterialPageRoute(builder: (context) =>
ChangeNotifierProvider(
create: (BuildContext context) {
return MainViewModel(color);
},
child: NextScreen(),
),
),
);
한석민
질문자2022.09.13
라우트 안에서 생성할 생각을 못했네요 또 한 번 배웁니다 감사합니다 ㅠㅠ. 적용했습니다.
이제 이번에 나온 강의 들으러 가겠습니다.
좋은 강의 감사합니다. 유튜브에서 multipart 강의도 보고 유용하게 사용했습니다 !
좋은하루 되세요 ^^!
답변 1