Dart & Flutter

[Flutter] FlutterError (setState() or markNeedsBuild() called during build.

ju_young 2023. 5. 12. 16:37
728x90

아래처럼 widget이 return되기 전에 조건에 따라 실행되는 함수를 넣었다.

ValueListenableBuilder<int>(
                  valueListenable: notifierValue,
                  builder: (context, value, child) {
           
                    if (value == 0) {
                      func();
                    }
                    
                    return Row(
...

func 함수는 다음과 같이 Navigator.push를 포함한다.

void func() {
      ...
      Navigator.push(
          context,
          MaterialPageRoute(
              builder: (context) => HomeScreen();
      ...
    }

FlutterError (setState() or markNeedsBuild() called during build. 라는 에러가 발생한 이유는 build가 진행 중인데 navigator.push를 했기 때문이다.

 

해결 방법은 아래와 같이 WidgetsBinding을 사용해주면 된다.

void func() {
      ...
	  WidgetsBinding.instance.addPostFrameCallback((_) {
          Navigator.push(
              context,
              MaterialPageRoute(
                  builder: (context) => HomeScreen();
        });
      ...
    }

[reference]

https://velog.io/@jun7332568/%ED%94%8C%EB%9F%AC%ED%84%B0flutter-setState-or-markNeedsBuild-called-during-build.-%EC%98%A4%EB%A5%98-%ED%95%B4%EA%B2%B0

728x90