반응형
사이즈를 하드 코딩하는 것보다
사실 flexible을 사용하는 것이 기기의 비율을 바탕으로 꽉 채워주기 때문에 이게 제일 이상적인 크기 설정 방법이 아닐까 싶다.
import 'package:flutter/material.dart';
class HomeScreen extends StatefulWidget {
const HomeScreen({super.key});
@override
State<HomeScreen> createState() => HomeScreenState();
}
class HomeScreenState extends State<HomeScreen> {
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: Theme.of(context).backgroundColor,
body: Column(
children: [
Flexible(
flex: 1,
child: Container(
decoration: const BoxDecoration(
color: Colors.red,
),
),
),
Flexible(
flex: 3,
child: Container(
decoration: const BoxDecoration(
color: Colors.green,
),
),
),
Flexible(
flex: 1,
child: Container(
decoration: const BoxDecoration(
color: Colors.blue,
),
),
),
],
),
);
}
}
기기마다 다른 크기를 생각해서 Flexible 같은 비율로 높이/너비를 설정하는 게 유용할 것이다
main.dart 파일에서 설정한 theme backgroundColor 와 cardColor를 가지고 사용한다.
Column으로 나눈 칸이 Row 한 열을 꽉 채우지 않을 때
먼저 Row로 감싸주고 Row내에서 Expanded로 감싸면 한 열을 꽉 채울 수 있다.
Flexible(
flex: 1,
child: Row(
children: [
Expanded(
child: Container(
decoration: BoxDecoration(
color: Theme.of(context).cardColor,
),
main.dart
import 'package:flutter/material.dart';
import 'package:toonflix/screenS/home_screen.dart';
void main() {
runApp(const App());
}
class App extends StatelessWidget {
const App({super.key});
@override
Widget build(BuildContext context) {
return MaterialApp(
theme: ThemeData(
backgroundColor: const Color(0xFFE7626C),
textTheme: const TextTheme(
headline1: TextStyle(
color: Color(0xFF232B55),
),
),
cardColor: const Color(0xFFF4EDDB)),
home: const Scaffold(
body: HomeScreen(),
),
);
}
}
home_screen.dart
import 'package:flutter/material.dart';
class HomeScreen extends StatefulWidget {
const HomeScreen({super.key});
@override
State<HomeScreen> createState() => HomeScreenState();
}
class HomeScreenState extends State<HomeScreen> {
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: Theme.of(context).backgroundColor,
body: Column(
children: [
Flexible(
flex: 1,
child: Container(
alignment: Alignment.bottomCenter,
child: Text(
'25:00',
style: TextStyle(
color: Theme.of(context).cardColor,
fontSize: 89,
fontWeight: FontWeight.w600,
),
),
),
),
Flexible(
flex: 3,
child: Center(
child: IconButton(
color: Theme.of(context).cardColor,
iconSize: 120,
onPressed: () {},
icon: const Icon(Icons.play_circle_outline),
),
),
),
Flexible(
flex: 1,
child: Row(
children: [
Expanded(
child: Container(
decoration: BoxDecoration(
color: Theme.of(context).cardColor,
),
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text('pomodoro',
style: TextStyle(
fontSize: 20,
fontWeight: FontWeight.w600,
color:
Theme.of(context).textTheme.headline1!.color,
)),
Text('0',
style: TextStyle(
fontSize: 58,
fontWeight: FontWeight.w600,
color:
Theme.of(context).textTheme.headline1!.color,
)),
],
),
),
),
],
),
),
],
),
);
}
}
flexible 기능을 한 번 더 연습 해야겠고,
mainAxis와 cross... 관련 영상 설명 한 번만 더 들어야겠다.
반응형
'Flutter > Flutter로 웹툰 앱 만들기' 카테고리의 다른 글
[노마드코더: Flutter 로 웹툰 앱 만들기] #5.2 Pause Play (0) | 2022.12.02 |
---|---|
[노마드코더: Flutter 로 웹툰 앱 만들기] #5.1 Timer (0) | 2022.12.02 |
[노마드코더: Flutter 로 웹툰 앱 만들기] #4.4 Widget Lifecycle (1) | 2022.11.30 |
[노마드코더: Flutter 로 웹툰 앱 만들기] #4.3 BuildContext (0) | 2022.11.30 |
[노마드코더: Flutter 로 웹툰 앱 만들기] #4.2 Recap (0) | 2022.11.29 |