개발/flutter

[Flutter] 디바이스 별로 다른 Widget의 넓이 설정하기

덤벨로퍼 2020. 9. 7. 16:34

위젯에 넓이나 높이를 지정해줄 때 이런 식으로 넓이와 높이를 지정해준다.

Container(
	height:400,
    width:200
)

디자인을 보고 넓이를 지정해줬거나 시뮬레이터에서 직접 만들면서 넓이를 지정해줬든 간에

너비가 넓은 디바이스, 좁은 디바이스에 모두 똑같은 너비의 위젯이 된다.

이런 경우 여백에  차이가 있을 것이고 의도치 않을 수 있다.

 

MediaQuery를 활용해 디바이스의 실제 너비를 구할 수 있다.

MediaQuery.of(context).size.width;

 

200의 너비를 디바이스의 크기별로 맞춰서 계산하려면 이렇게 하면 된다.

final deviceWidth = MediaQuery.of(context).size.width;
final standardDeviceWidth = 360;
Container(
	width:200 * ( deviceWidth / standardDeviceWidth)
)

standartDeviceWidth는 내가 디자인을 할 때 기준에 맞췄던 디바이스의 너비이다.

360 너비의 디자인에 맞춰 위젯을 만들었을 때

그 위젯의 너비가 200이라면

 

 

새로운 디바이스에서는 이런 공식이 된다.

final deviceWidth = MediaQuery.of(context).size.width;

final standardDeviceWidth = 360;
final widgetWidth = 200


//공식
// 200 % 360 =  위젯의넓이 % deviceWidth
// 200 % 360 * deviceWidth = 위젯의 넓이
// 200 * ( deviceWidth/360)  = 위젯의 넓이

해당 디바이스의 너비와 360의 비율을 계산한 후 200을 곱해주면 실제 위젯의 너비가 된다.

디바이스의 너비와 360이라는 기준은 변하지 않으므로 다른 페이지, 위젯에서 재활용할 수 있다.

 

static double scaleWidth(BuildContext context) {
  const designGuideWidth = 360;
  final diff = getDeviceWidth(context) / designGuideWidth;
  return diff;
}
  
  
   Container(
   	height: 224 * scaleWidth(context),
   ),

위의 예시처럼 메소드를 하나 만들어두고

필요할때마다 꺼내서 쓰는 방식으로 사용하면 편하게 넓이나 높이를 지정해줄수있다.