
1. MaterialApp : 새까만 화면
import 'package:flutter/material.dart'; void main() { runApp(const MyApp()); } class MyApp extends StatelessWidget { const MyApp({super.key}); // 디폴트 생성자 -> 생략 가능 @override Widget build(BuildContext context) { return MaterialApp() } }

2. Scaffold는 선택적 매개 변수
- 위젯의 뼈대 제공

3. Row : 새로 정렬하기
children: [] // list의 위젯타입
import 'package:flutter/material.dart'; void main() { runApp(const MyApp()); } class MyApp extends StatelessWidget { const MyApp({super.key}); // 디폴트 생성자 -> 생략 가능 @override Widget build(BuildContext context) { return MaterialApp( home: Scaffold( body: Column(), // 새로 정렬 ), ); } }
4. Test : 키 값 없이 쓸 수 있는 시그니처 매개변수
import 'package:flutter/material.dart'; void main() { runApp(const MyApp()); } class MyApp extends StatelessWidget { const MyApp({super.key}); // 디폴트 생성자 -> 생략 가능 @override Widget build(BuildContext context) { return MaterialApp( home: Scaffold( body: Column( // 새로 정렬, 데이터를 여러건 둘 수 있음 children: [ // list의 위젯타입 Text("안녕"), // 키값 없이 쓸 수 있는 시그니처 매개변수 Text("안녕"),], ), ), ); } }


5. 선택하기
CTRL + W


6. scaffold와 body에 그림을 그리면 됨
import 'package:flutter/material.dart'; void main() { runApp(const MyApp()); } class MyApp extends StatelessWidget { const MyApp({super.key}); // 디폴트 생성자 -> 생략 가능 @override Widget build(BuildContext context) { return MaterialApp( home: StorePage(), ); } } class StorePage extends StatelessWidget { const StorePage({super.key}); @override Widget build(BuildContext context) { return const Placeholder(); } }
import 'package:flutter/material.dart'; void main() { runApp(const MyApp()); } class MyApp extends StatelessWidget { const MyApp({super.key}); // 디폴트 생성자 -> 생략 가능 @override Widget build(BuildContext context) { return MaterialApp( home: StorePage(), ); } } class StorePage extends StatelessWidget { const StorePage({super.key}); @override Widget build(BuildContext context) { return Scaffold(); // 페이지 만드는 구조 -> 모든 페이지가 다 가지고 있어야 함 } }

import 'package:flutter/material.dart'; void main() { runApp(const MyApp()); } class MyApp extends StatelessWidget { const MyApp({super.key}); // 디폴트 생성자 -> 생략 가능 @override Widget build(BuildContext context) { return MaterialApp( home: StorePage(), ); } } class StorePage extends StatelessWidget { const StorePage({super.key}); @override Widget build(BuildContext context) { return Scaffold( // 페이지 만드는 구조 -> 모든 페이지가 다 가지고 있어야 함 body: Column( children: [ Row( // 가로 행 children: [ Text("Woman"), ], ), ], ), ); } }
6. 자동 정렬 설정하기

실습하기
import 'package:flutter/material.dart'; void main() { runApp(const MyApp()); } class MyApp extends StatelessWidget { const MyApp({super.key}); // 디폴트 생성자 -> 생략 가능 @override Widget build(BuildContext context) { return MaterialApp( home: StorePage(), ); } } class StorePage extends StatelessWidget { const StorePage({super.key}); @override Widget build(BuildContext context) { return Scaffold( // 페이지 만드는 구조 -> 모든 페이지가 다 가지고 있어야 함 body: Column( children: [ Row( // 가로 행 children: [ Text("Woman"), Text("Kids"), Text("Shoes"), Text("Bag"), ], ), ], ), ); } }

7. 구조 보기




- inSet 영역 : 이미 사용하고 있는 영역, 화면을 가리는 영역


8. inSet 영역 피하기
- inSet : 이미 사용하고 있는 영역, 화면을 가리는 영역

- 다 계층 구조임

SafeArea // 시스템 UI를 자동으로 피해줌
import 'package:flutter/material.dart'; void main() { runApp(const MyApp()); } class MyApp extends StatelessWidget { const MyApp({super.key}); // 디폴트 생성자 -> 생략 가능 @override Widget build(BuildContext context) { return MaterialApp( home: StorePage(), ); } } class StorePage extends StatelessWidget { const StorePage({super.key}); @override Widget build(BuildContext context) { return Scaffold( // 페이지 만드는 구조 -> 모든 페이지가 다 가지고 있어야 함 body: SafeArea( child: Column( children: [ Row( // 가로 행 children: [ Text("Woman"), Text("Kids"), Text("Shoes"), Text("Bag"), ], ), ], ), ), ); } }

- heap에 text를 띄우면서 text의 reference가 저장되는 것

import 'package:flutter/material.dart'; void main() { runApp(const MyApp()); } class MyApp extends StatelessWidget { const MyApp({super.key}); // 디폴트 생성자 -> 생략 가능 @override Widget build(BuildContext context) { return MaterialApp( home: StorePage(), ); } } class StorePage extends StatelessWidget { const StorePage({super.key}); @override Widget build(BuildContext context) { return Scaffold( // 페이지 만드는 구조 -> 모든 페이지가 다 가지고 있어야 함 body: SafeArea( child: Column( children: [ Padding( padding: const EdgeInsets.all(25.0), child: Row( // 가로 행 mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Text( "Woman", style: TextStyle(),), Text("Kids"), Text("Shoes"), Text("Bag"), ], ), ), ], ), ), ); } }


11. 글자 굵기 조절하기
import 'package:flutter/material.dart'; void main() { runApp(const MyApp()); } class MyApp extends StatelessWidget { const MyApp({super.key}); // 디폴트 생성자 -> 생략 가능 @override Widget build(BuildContext context) { return MaterialApp( home: StorePage(), ); } } class StorePage extends StatelessWidget { const StorePage({super.key}); @override Widget build(BuildContext context) { return Scaffold( // 페이지 만드는 구조 -> 모든 페이지가 다 가지고 있어야 함 body: SafeArea( child: Column( children: [ Padding( padding: const EdgeInsets.all(25.0), child: Row( // 가로 행 mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Text( "Woman", style: TextStyle(fontWeight: FontWeight.bold), ), Text("Kids"), Text("Shoes"), Text("Bag"), ], ), ), ], ), ), ); } }

import 'package:flutter/material.dart'; void main() { runApp(const MyApp()); } class MyApp extends StatelessWidget { const MyApp({super.key}); // 디폴트 생성자 -> 생략 가능 @override Widget build(BuildContext context) { return MaterialApp( home: StorePage(), ); } } class StorePage extends StatelessWidget { const StorePage({super.key}); @override Widget build(BuildContext context) { return Scaffold( // 페이지 만드는 구조 -> 모든 페이지가 다 가지고 있어야 함 body: SafeArea( child: Column( children: [ Padding( padding: const EdgeInsets.all(25.0), child: Row( // 가로 행 mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Text( "Woman", style: TextStyle(fontWeight: FontWeight.bold), ), Text( "Kids", style: TextStyle(fontWeight: FontWeight.bold), ), Text( "Shoes", style: TextStyle(fontWeight: FontWeight.bold), ), Text( "Bag", style: TextStyle(fontWeight: FontWeight.bold), ), ], ), ), ], ), ), ); } }

Share article