• 카테고리

    질문 & 답변
  • 세부 분야

    모바일 앱 개발

  • 해결 여부

    미해결

StateNotifierProvider로 생성하고 수정한 데이터를 함수 내부에서 불러오기

24.04.14 15:11 작성 조회수 76

0

안녕하세요. 코드팩토리님. 강의를 참고하여 한가지 기능을 만들어보고자 했습니다. 현재까지 데이터모델을 생성하고, 데이터모델 타입으로 된 리스트들을 저장하는 프로바이더를 생성하여 read로 리스트를 추가 및 삭제하며, watch를 통해 목록을 보도록 하였습니다.

그런데 제가 추가하고자 하는 기능 중, consumerWidget과 같은 위젯을 사용하지 않고 때에 따라 함수를 부를 때에 함수 내부에서 프로바이더에 저장된 데이터목록을 불러와야 하는 상황이 되었고, 코드를 작성해보았는데 역시나 위젯이 아닌 함수에서 호출을 하려니 watch, read등 작동하지 않는 문제가 발생하였습니다.

void scheduleAlarmFishs() async {
  //ref로 데이터 가져오기.
  final container = ProviderContainer();
  final fishs = container.read(fishListProvider); // read 사용
  print('Retrieved ${fishs.length}');
}

혹시 이런식으로 함수를 통한 접근은 아예 불가능한 건가요?ㅠㅠ

답변 2

·

답변을 작성해보세요.

0

안녕하세요!

함수에서 실행은 원칙적으로 read()가 맞습니다.

하지만 ref는 사용 하셔야 할 것으로 생각됩니다.

감사합니다!

0

인프런 AI 인턴님의 프로필

인프런 AI 인턴

2024.04.14

안녕하세요, 인프런 AI 인턴입니다.

kimsuin님의 질문에 대해, 함수 내에서 Provider 관련 객체에 접근하기 위한 방법을 질문하신 것으로 이해됩니다. 특히 StateNotifierProvider를 이용해 데이터를 관리하면서, ProviderContainer를 사용하여 함수 내부에서 Provider에 저장된 데이터를 불러오는 과정에 대한 질문이신 것 같습니다.

같은 컨텍스트에서 Provider 관련 객체를 함수 내에서 사용하는 방법에 대한 유사 질문과 그에 대한 해결 방법을 제공하는 게시물이 있어 이를 공유드립니다.

  • 제목: StateNotifierProvider 실습에서의 답변이 함수 내에서 상태 관리 객체를 효율적으로 사용하는 방법에 대한 내용을 포함하고 있습니다. 이 답변은 Provider의 사용법에 대해 깊이 있는 설명을 제공하며, 특히 상태 변화를 감지하고 이에 따라 함수를 트리거하는 방법에 대한 유익한 정보를 포함하고 있습니다.
- 코드팩토리님의 답변:
  List에 add() 함수를 사용할 때와 달리, 변수의 메모리 주소가 변해야 watch()가 실행된다는 점을 강조하며, 모든 상태 관리 도구에서 변수의 실제 메모리 주소 변화를 감지하여 상태 변화를 트리거한다는 점을 설명합니다. 이는 함수 내에서 프로바이더를 사용할 때도 중요한 원리로 적용될 수 있습니다.

특히, 함수 내에서 Provider를 사용할 때는 ProviderContainer 객체를 직접 생성하고 접근하는 방법이 유용할 수 있으나, 이를 통해 얻어진 데이터의 변경을 감지하고 UI가 반영되기 위해서는 Flutter 위젯 라이프사이클과 함께 동작하는 watch 등의 메서드를 적절히 사용해야 합니다. 첨부된 링크의 설명을 통해, 함수 내에서 상태를 관리하고 접근하는 방법에 대한 보다 구체적인 아이디어를 얻으실 수 있을 것입니다.

질문하신 내용이 함수 내부에서 Provider 사용에 초점을 맞추고 있으므로, 주어진 링크와 설명이 직접적인 해결책을 제공하지는 않을 수 있습니다. ProviderContainer의 사용법 및 Provider의 상태 관리 방법에 대한 더 구체적인 답변을 원하신다면, 해당 강의의 Q&A 섹션을 통해 더 자세한 질문을 남기시는 것도 하나의 방법일 수 있습니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.