final orientation = MediaQuery.of(context).orientation;
...
return GridView(
gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
crossAxisCount:
orientation == Orientation.portrait ? 2 : 4,
),
위와 같이 하면 아래 사진처럼 나온다.
![](https://velog.velcdn.com/images/teddyjune/post/3ca41916-1b3c-451d-b292-a4eeef35c696/image.png)
그러나 아래 코드와 같이 orientationbuilder를 사용하면 아래와 같이 나온다.
return OrientationBuilder(builder: (context, orientation) {
return GridView(
gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
crossAxisCount:
orientation == Orientation.portrait ? 2 : 4,
),
![](https://velog.velcdn.com/images/teddyjune/post/d37cca90-3b0a-4a38-bde8-fade7c7d5c8e/image.png)
orientationbuilder는 상위 위젯에 사용할 수 있는 폭과 높이를 비교하여 현재방향을 계산하고, 상위 위젯의 크기가 변경될 때 다시 작성한다. 그래서 키보드가 올라왔을 때 세로보다 가로가 길어진다고 계산해서 가로모드로 인식한 듯 하다.