Flutter의 다양한 화면 크기 지원 방법
Flutter는 다양한 장치에서 실행될 수 있도록 설계된 크로스플랫폼 프레임워크입니다. 하지만 모바일, 태블릿, 웹, 데스크톱 등 서로 다른 화면 크기에서 일관된 사용자 경험을 제공하려면 반응형 UI를 구현해야 합니다.
이 글에서는 Flutter에서 다양한 화면 크기를 지원하는 주요 방법을 살펴보고, 효과적인 코드 예제와 함께 설명하겠습니다.
1. 반응형 UI란?
반응형 UI(Responsive UI)란 화면 크기에 따라 동적으로 레이아웃이 조정되는 UI를 의미합니다. 모바일과 태블릿, 웹 환경에서 동일한 앱을 실행할 때 적절한 UI가 자동으로 적용되어야 합니다.
Flutter에서 반응형 UI를 만들기 위해 활용할 수 있는 대표적인 방법은 다음과 같습니다.
MediaQuery
를 이용한 화면 크기 감지LayoutBuilder
를 활용한 위젯 크기 조정Flexible
및Expanded
을 사용한 동적 크기 조정- 패키지를 활용한 반응형 디자인
2. MediaQuery를 사용한 반응형 UI
MediaQuery
는 Flutter에서 현재 디바이스의 화면 크기를 가져오는 방법 중 하나입니다. 이를 활용하면 화면 크기에 따라 레이아웃을 동적으로 변경할 수 있습니다.
import 'package:flutter/material.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: ResponsiveScreen(),
);
}
}
class ResponsiveScreen extends StatelessWidget {
@override
Widget build(BuildContext context) {
double screenWidth = MediaQuery.of(context).size.width;
return Scaffold(
appBar: AppBar(title: Text('MediaQuery 반응형 UI')),
body: Center(
child: Text(
'화면 너비: ${screenWidth.toStringAsFixed(2)} px',
style: TextStyle(fontSize: screenWidth * 0.05),
),
),
);
}
}
위 코드에서는 MediaQuery.of(context).size.width
를 사용하여 화면의 너비를 가져오고, 이에 따라 텍스트 크기를 동적으로 조정합니다.
3. LayoutBuilder를 활용한 반응형 UI
LayoutBuilder
를 사용하면 특정 위젯의 부모 컨테이너 크기를 기준으로 동적인 레이아웃을 구성할 수 있습니다.
import 'package:flutter/material.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(title: Text('LayoutBuilder 예제')),
body: LayoutBuilder(
builder: (context, constraints) {
if (constraints.maxWidth > 600) {
return Center(
child: Text('태블릿 레이아웃', style: TextStyle(fontSize: 24)),
);
} else {
return Center(
child: Text('모바일 레이아웃', style: TextStyle(fontSize: 18)),
);
}
},
),
),
);
}
}
위 코드에서는 constraints.maxWidth
값을 확인하여 태블릿(600px 이상)과 모바일 화면에서 서로 다른 텍스트 스타일을 적용합니다.
4. Flexible 및 Expanded 활용
Flexible
과 Expanded
위젯을 사용하면 화면 크기에 따라 UI 요소가 적절히 확장되거나 축소되도록 만들 수 있습니다.
import 'package:flutter/material.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(title: Text('Flexible & Expanded 예제')),
body: Column(
children: [
Expanded(
child: Container(color: Colors.blue),
),
Flexible(
child: Container(color: Colors.red, height: 100),
),
Expanded(
child: Container(color: Colors.green),
),
],
),
),
);
}
}
위 코드는 Expanded
를 사용하여 화면의 남은 공간을 자동으로 채우고, Flexible
을 사용하여 특정 높이를 유지하도록 설정했습니다.
5. 패키지를 활용한 반응형 UI
Flutter에서 반응형 UI를 쉽게 구현할 수 있도록 돕는 여러 패키지가 있습니다. 대표적인 패키지는 다음과 같습니다.
- flutter_screenutil: 화면 크기에 따라 자동으로 UI 크기를 조정
- responsive_builder: 화면 크기에 따라 다른 위젯을 적용
(1) flutter_screenutil 사용 예제
flutter_screenutil
패키지를 사용하면 다양한 화면 크기에서 자동으로 UI 크기를 조정할 수 있습니다.
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return ScreenUtilInit(
designSize: Size(360, 690), // 기본 디자인 크기
builder: () => MaterialApp(
home: Scaffold(
appBar: AppBar(title: Text('ScreenUtil 예제')),
body: Center(
child: Text(
'반응형 텍스트',
style: TextStyle(fontSize: 20.sp), // sp 단위 사용
),
),
),
),
);
}
}
위 코드에서 20.sp
를 사용하면 화면 크기에 맞게 텍스트 크기가 자동 조정됩니다.
결론
Flutter에서 다양한 화면 크기를 지원하는 방법에는 여러 가지가 있습니다.
MediaQuery
를 사용하여 화면 크기와 방향을 감지LayoutBuilder
를 활용하여 동적 UI 적용Flexible
과Expanded
을 사용하여 유동적인 레이아웃 구성- 패키지를 사용하여 화면 크기에 따라 자동으로 UI 조정
위 방법들을 적절히 활용하면 다양한 장치에서도 일관된 사용자 경험을 제공할 수 있습니다. 이제 반응형 UI를 적용하여 더욱 완성도 높은 Flutter 앱을 만들어 보세요!
'Flutter' 카테고리의 다른 글
Flutter의 태블릿 및 데스크톱 지원 방법 (0) | 2025.03.24 |
---|---|
Flutter의 화면 회전(Screen Rotation) 지원 방법 (0) | 2025.03.24 |
Flutter의 미디어 쿼리(MediaQuery) 사용법 (0) | 2025.03.23 |
Flutter의 반응형 리스트뷰 구현 방법 (0) | 2025.03.23 |
Flutter에서 테두리(Border) 효과 적용하기 (0) | 2025.03.23 |