본문 바로가기
TIL

[트러블슈팅] 영화 정보 앱

by chengzior 2024. 12. 30.

[문제 1]

홈페이지 뷰모델에서 moviefetch를 구현하고자 했다.

처음에는 각 기능별로 fetch를 구현하면 되겠다는 생각에 메서드를 여러개 생성했는데 

그렇게 구현해보니 state를 통해 리스트를 어떻게 불러와야 할 지 난감했다.

[해결방법]

무비 리스트라는 클래스를 새로 만들어서 각 메서드를 업데이트 해주는 방식으로 구현했다.

  Future<void> fetchMovies() async {
    try {
      final popularMovies =
          await ref.read(fetchMoviesUsecaseProvider).getPopular();
      final nowPlayingMovies =
          await ref.read(fetchMoviesUsecaseProvider).excute();
      final topRatedMovies =
          await ref.read(fetchMoviesUsecaseProvider).getTopRated();
      final upcomingMovies =
          await ref.read(fetchMoviesUsecaseProvider).getUpcoming();

      state = state.copyWith(
          nowPlayingMovies: nowPlayingMovies!,
          popularMovies: popularMovies!,
          topRatedMovies: topRatedMovies!,
          upcomingMovies: upcomingMovies!);
    } catch (e) {
      print(e);
    }
  }

뷰모델에서 각각의 리스트를 업데이트 할 수 있도록 코드를 작성해주고

final movies = ref.watch(homePageViewModel);
movies.popularMovies[0].posterPath

홈페이지에서 이렇게 불러와서 사용해주는 것으로 해결했다.


[문제 2]

flutter: Error fetching movie detail: ClientException with SocketException: 
Failed host lookup: 'api.themoviedb.org' (OS Error: nodename nor servname provided, 
or not known, errno = 8), uri=https://api.themoviedb.org/3/movie/558449

영화 포스터를 눌러 상세 정보를 보여주는 detail 페이지로 넘어가면 이런 오류가 뜨기 시작...

════════ Exception caught by image resource service ════════════════════════════
Failed host lookup: 'image.tmdb.org' (OS Error: nodename nor servname provided, 
or not known, errno = 8)
════════════════════════════════════════════════════════════════════════════════

 

nslookup api.themoviedb.org

터미널에서 dns 설정 확인을 위해 위와 같은 코드를 입력했더니

;; Got recursion not available from ###, ...

이러한 결과를 얻었다. 
찾아보니 DNS 서버에서 **재귀적 조회(recursive query)**가 비활성화되어 있을 때 발생하는 오류라고..

[해결 방법]
현재 사용하는 DNS 서버를 변경하기로.
일반적으로 신뢰할 수 있는 공개 DNS 서버로 설정하는 것이 좋다고 한다.

macOS에서 DNS 변경

시스템 환경설정 → 네트워크 → 사용하는 네트워크 선택.
DNS 탭에서 새 DNS 서버 추가:
8.8.8.8
8.8.4.4

 

이렇게 해봤는데 아래의 오류는 해결되지 않음

════════ Exception caught by image resource service ════════════════════════════
Failed host lookup: 'image.tmdb.org' (OS Error: nodename nor servname provided, 
or not known, errno = 8)

디테일 페이지에 머무는 동안 발생하는 오류이고 홈페이지로 돌아왔을 때
이미지가 표시 안된다.
떠 있는 아무 포스터나 눌러서 갔다 오면 (refresh 같은 느낌으로 )
이미지들이 잘 표시된다..