Flutter 2.5.1
Dart 2.14.2
책의 예제를 테스트 하던 중 못보던 오류가 갑자기 발생하였다.
======== Exception caught by foundation library ====================================================
The following assertion was thrown while dispatching notifications for FixedExtentScrollController:
'package:flutter/src/rendering/object.dart': Failed assertion: line 2666 pos 12: '!_debugDisposed': is not true.
CupertinoPicker 위젯에서 scrollController 속성에 적용한 FixedExtentScrollController 에서 발생한 오류인데, 도통 원인을 알 수가 없었다. 오류 stack을 따라가봐도 내가 만든 코드가 아니라 flutter의 기본 코드들이다.
당연히 구글링을 시작했고,
동일한 오류에 대한 내용을 발견했다.
원인 및 해결책
https://issueexplorer.com/issue/flutter/flutter/90123
마지막 즈음의 댓글에 원인과 해결책이 나오는데,
질문자는 처음에 controller 변수를 global 로 선언하였었나보다.
어쨌든, 처음 한번은 controller instance가 존재하므로 정상 동작했지만, picker 위젯을 나올때 controller가 dispose 되므로, 이후에 다시 picker 위젯으로 진입하면 controller instance가 없기 때문에 문제가 된다는 내용이다.
updated된 sample을 보면 FixedExtendScdrollController 변수를 class 내부로 옮긴 것을 확인할 수 있다.
문제해결
내가 테스트하던 예제는, Popup 에 의해 CupertinoPicker 위젯을 띄우도록 하였는데, 처음 한번은 정상동작 하지만 popup을 닫은 후 다시 진입하면 오류가 발생했었다. 위의 해결책에 설명된 대로, popup을 닫을때 controller가 dispose 되는 것을 감안하여 controller 를 함수 내부로 옮겼고, 오류 해결되었다.
한가지 확인이 필요한 부분은 이 오류가 flutter 2.5 버전으로 update 한 이후에 새롭게 발생했다는 점이다. 저 링크의 질문자도 flutter 2.5 업데이트 이후에 확인된 문제라고 한다. 추후 flutter 업데이트에서 다시 수정이 될 가능성이 있다는 뜻!
실제로 본 문제는 명시적으로 controller를 dispose 한게 아닌데도 불구하고 widget을 빠져나오면서 자동으로 dispose 되어버린게 원인이 된 것이다. flutter 자체적으로 수정이 되어야 할 부분이라고 생각한다.
'프로그래밍 > flutter' 카테고리의 다른 글
flutter 에서 page 이동시 argument 전달 (0) | 2021.10.03 |
---|---|
'Device File Explorer' missing on Android Studio (0) | 2021.09.26 |
TextField 내부 padding 제거 (0) | 2021.09.12 |
Android Studio 단축키 (for Mac) (0) | 2021.09.05 |
flutter doctor - "Unable to find bundled Java version." 오류 처리. (2) | 2021.09.04 |