Flutter 개발 상자

[Flutter] [Riverpod] CircularDependencyError 오류 해결 본문

Flutter/오류해결

[Flutter] [Riverpod] CircularDependencyError 오류 해결

망고상자 2024. 1. 2. 17:12
728x90

에러 분석

 

위 에러는 Riverpod Provider들이 서로가 서로를 의존하는 순환 참조 에러이다.

순환 참조에 대한 ChatGPT의 설명은 다음과 같다.

 

순환 참조(circular reference)는 두 개 이상의 객체나 모듈이 서로를 참조하는 상황을 나타냅니다. 이는 무한 루프와 같은 문제를 일으킬 수 있으며 메모리 누수와 같은 예기치 못한 동작을 초래할 수 있습니다.

프로그래밍에서 순환 참조는 주로 다음과 같은 상황에서 발생할 수 있습니다:

  1. 객체 간의 순환 참조:
    • 클래스나 객체 A가 다른 클래스나 객체 B를 참조하고, 동시에 B도 A를 참조하는 경우입니다. 이런 상황에서 A를 가리키는 참조 카운트와 B를 가리키는 참조 카운트가 0이 되지 않아 메모리가 해제되지 않을 수 있습니다.
  2. 모듈 간의 순환 참조:
    • 모듈이 서로를 참조하는 경우입니다. 예를 들어, 모듈 A가 모듈 B를 참조하고, 동시에 모듈 B도 모듈 A를 참조하는 경우입니다. 이는 모듈 간의 의존성을 해결하는 데 어려움을 초래할 수 있습니다.

 

위와 같은 문제 때문에 Riverpod에서는 Provider 간의 순환참조가 일어날경우 런타임 에러가 발생하도록 설계되어있다.

 

 

해결법

 

보통 해당 에러의 경우 함수영역에서 watch를 사용하면서 발생한다.

A프로바이더에서 B프로바이더의 함수를 실행시켰는데 이 B프로바이더의 함수에서 A프로바이더를 watch 하고 있을경우 순환참조 에러가 발생한다.

read로 고쳐주면 간단하게 수정된다.

 

 

요약

  • 함수영역에선 read 사용하기

 

728x90