Skip to main content

Flutter TIL - 5

· 2 min read
Park Ki Hyun

nullable constructor


실수한 코드

처음에 class의 인스턴스를 만들 때 nullable로 선언하면 될 줄 알았다.

class NaviState {
final int? index;
final bool? yesOrNo;

NaviState({
this.index,
this.yesOrNo,
});
}

이렇게 했더니 사용하는 변수 타입이 nullabe이 되어버려서 계속 사용하는 변수 뒤에 !를 붙여줘서 null이 아님을 명시했어야 했는데

원했던 코드

class NaviState {
final int index;
final bool yesOrNo;

NaviState({
int? index,
bool? yesOrNo,
}) : index = index ?? 0,
yesOrNo = yesOrNo ?? false;
}

이렇게 nullable로 선언하는 것이 아닌 생성자에서 nullable로 받고 null인 경우 초기값을 설정하도록 하는 것이 내가 의도한 방향성과 더 맞는 코드인 것을 알게 됐다.


flutter에서 라우팅 하는 방법은 좀 다양한 것 같다.

그 중 Navigator.pushNamed이다.

Navigator.pushNamed로 context에 불러올 위젯 이름을 push한다.

그러면 정의해 놓은 onGenerateRoute를 통해서 page를 불러오면 된다. 간단하다.

GestureDetector 렌더링 문제


갑자기 GestureDetector만 사용하면 렌더링 에러가 났다.

GestureDetector에 사이즈를 제공해주지 않았기 때문이라고 한다. (ListView도 마찬가지다)

Expanded(
child: SizedBox(
height: 200,
width: 200,
child: GestureDetector(),
),
)

이런식으로 구현할 수 있다.