인프런 커뮤니티 질문&답변

강민성님의 프로필 이미지

작성한 질문수

[2024 최신] [코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!

FutureBuilder 대신 StreamBuilder 사용하기

FutureBuilder에서 setstate사용

24.07.08 16:31 작성

·

123

0

FutureBuilder를 사용하는 목적이 비동기 함수의 변경 사항을 감지하고 자동으로 ui를 업데이트 해주는 기능으로 알고 있습니다.

그래서 stateless위젯에서도 사용가능한걸로 알고 있습니다.

이번 프로젝트에서는 FutureBuilder를 사용해도 setState가 필요한지 헷갈립니다.

혹시 제가 잘못 알고 있는 건지 아니면 future로 받는 테이블 데이터가 변경 사항이 없어서 그런 건지 궁금합니다!

답변 2

0

코드팩토리님의 프로필 이미지
코드팩토리
지식공유자

2024. 07. 15. 08:49

안녕하세요!

StatelessWidget과 FutureBuilder를 같은 선상에서 비교하는건 무리가 있습니다.

FutureBuilder를 Widget 내부에서 사용하기 때문입니다.

FutureBuilder는 Future의 값의 변화에 따라 builder 함수가 재실행되는 기능을 제공합니다.

StatefulWidget의 setState() 함수는 build 함수를 재실행하는 역할을 합니다.

만약에 setState로 FutureBuilder를 대체 할 수 있다면 대체해도 되고 반대로도 가능합니다.

감사합니다!

0

인프런 AI 인턴님의 프로필 이미지

2024. 07. 10. 16:36

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

FutureBuilder를 사용하는 주된 목적은 말씀하신 대로 비동기 작업을 수행하고, 그 결과에 따라 UI를 업데이트하는 것입니다. 일반적으로는 FutureBuilder 내에서 비동기 작업의 결과에 따라 다른 위젯을 보여주기 때문에 별도로 상태를 관리할 필요는 없습니다.

하지만, 특정 상황에서 FutureBuilder가 사용하는 데이터를 다른 곳에서 업데이트하고 싶거나, 비동기 작업의 결과에 따라 상태를 변경시켜야 할 필요가 있다면 setState()를 사용할 수 있습니다. 예를 들어, FutureBuilder가 완료되었을 때 어떤 상태 값에 의존하는 로직이 있다면, 해당 작업을 수행하기 위해 setState()를 사용할 수 있습니다.

그러나, 주의할 점은 setState()를 사용하면 위젯 전체가 다시 빌드되므로, 성능에 영향을 줄 수 있습니다. 또한, FutureBuilder 내부에서 setState()를 호출하는 경우 무한 루프에 빠질 위험이 있으므로, 상태 변경 로직은 적절히 관리되어야 합니다.

결론적으로, FutureBuilder를 사용해도 특정 상황에서 setState()가 필요할 수 있지만, 가능한 한 상태 관리를 최소화하고 FutureBuilder의 기능을 최대한 활용하는 것이 좋습니다. 데이터 변경이 필요한 경우에는 올바른 상태 관리 방법을 적용하는 것이 중요합니다.