일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 정올 1620
- 자바
- 중복조합
- 코테
- 백준13458
- 알고리즘개념
- BFS
- 백준15652
- 23288
- 파티션 크기 조정
- 순열
- 재귀함수
- 코테준비
- D드라이브생성
- 자바 코테
- 백준2251
- 백준
- 완탐
- java
- 주사위굴리기2
- 전화번호속의암호
- 정보처리기사
- 삼성역테
- 완전탐색
- N과M
- 에라토스테네스의채
- Bfs와DFS
- 볼륨 만들기
- 중복순열
- 알고리즘
- Today
- Total
뚱땅뚱땅
[Flutter] 기본 개념 + 예제 코드 작성 본문
1. Flutter ?
- 구글에서 만든 프레임워크. 크로스 플랫폼 개발 용이함.
- IOS의 스토리보드나 Android의 xml : 다른 데서 UI 만들고, 앱 상에서 UI를 불러오는 방식으로 코딩 했었는데 Flutter는 다름!
(EX 01)
import 'package:flutter/material.dart';
void main() => runApp(new MyApp()); // 앱 실행
class MyApp extends StatelessWidget{ // 상태 변경 없는 위젯. 한번 UI가 그려지면 그대로 있음.
@override
Widget build(BuildContext context){ // UI 만드는 부분
return new MaterialApp( // MaterialApp Design(구글 기본 디자인) 사용해서 앱 만듦
title: 'Flutter App',
debugShowCheckedModeBanner: false, // 화면에 debug 표시 안보이게 함
home: Scaffold(
appBar : AppBar(title: Text("Title")), //앱의 상단 타이틀
body : Text("My Flutter App") // 앱화면에 표시되는 text
),
);
}
}
2. Widget
- Flutter앱에 있는 모든 것들을 위젯이라 봐도 무방함. text, button, layout, MaterialApp, Scaffold,,,, 모두~!
- 가장 바깥의 위젯-> 안쪽으로 위젯 넣는 방식으로 앱 만든다.
- MaterialApp -> Home-> Scaffold -> AppBar / Body -> text ... 순서로
따라서, 위젯은 UI를 만드는 기본 단위이고, 안에서 밖으로 하나씩 더해주는 형태이다~!
* MaterialApp: Google의 material design 사용. 전체 앱의 테마, 색 등을 정할 수 있음.
* Scaffold : 기본적인 Material design 구조 잡아줌. 뼈대!
* Icon : 원하는 icon과 색 지정 가능.
body : Icon(Icons.send, color : Colors.blueAccent)
* Image
import 'package:flutter/material.dart';
void main() => runApp(new MyApp()); // 앱 실행
class MyApp extends StatelessWidget{ // 상태 변경 없는 위젯. 한번 UI가 그려지면 그대로 있음.
@override
Widget build(BuildContext context){ // UI 만드는 부분
var imageURL = "https://images.pexels.com/photos/912110/pexels-photo-912110.jpeg?auto=compress&cs=tinysrgb&dpr=2&h=650&w=940";
return new MaterialApp( // MaterialApp Design(구글 기본 디자인) 사용해서 앱 만듦
title: 'Flutter App',
debugShowCheckedModeBanner: false,
home: Scaffold(
appBar : AppBar(title: Text("Title")), //앱의 상단 타이틀
body : Image.network(imageURL)
),
);
}
}
* 여러 위젯 같이 써보기
- Column : 세로로 위젯 추가
import 'package:flutter/material.dart';
void main() => runApp(new MyApp()); // 앱 실행
class MyApp extends StatelessWidget{ // 상태 변경 없는 위젯. 한번 UI가 그려지면 그대로 있음.
@override
Widget build(BuildContext context){ // UI 만드는 부분
return new MaterialApp( // MaterialApp Design(구글 기본 디자인) 사용해서 앱 만듦
title: 'Flutter App',
debugShowCheckedModeBanner: false,
home: Scaffold(
appBar : AppBar(title: Text("Title")), //앱의 상단 타이틀
body : Column(
children: <Widget>[
Text("My First Flutter App"),
Text("Lets make our own app~!"),
Icon(Icons.android, color: Colors.amber)
],
)
),
);
}
}
- Row : 가로로 위젯 추가
import 'package:flutter/material.dart';
void main() => runApp(new MyApp()); // 앱 실행
class MyApp extends StatelessWidget{ // 상태 변경 없는 위젯. 한번 UI가 그려지면 그대로 있음.
@override
Widget build(BuildContext context){ // UI 만드는 부분
return new MaterialApp( // MaterialApp Design(구글 기본 디자인) 사용해서 앱 만듦
title: 'Flutter App',
debugShowCheckedModeBanner: false,
home: Scaffold(
appBar : AppBar(title: Text("Title")), //앱의 상단 타이틀
body : Row(
mainAxisAlignment: MainAxisAlignment.spaceAround, //위젯 간격 일정하게~!
children: <Widget>[
Text("My First Flutter App"),
Text("Lets make our own app~!"),
Icon(Icons.android, color: Colors.amber)
],
)
),
);
}
}
3. StatelessWidget VS StatefulWidget
(1) stateless 위젯에 버튼 넣기
import 'package:flutter/material.dart';
void main() => runApp(new MyApp()); // 앱 실행
class MyApp extends StatelessWidget{ // 상태 변경 없는 위젯. 한번 UI가 그려지면 그대로 있음.
int counter = 0;
void increaseCounter(){
counter++;
}
@override
Widget build(BuildContext context){ // UI 만드는 부분
return new MaterialApp( // MaterialApp Design(구글 기본 디자인) 사용해서 앱 만듦
title: 'Flutter App',
debugShowCheckedModeBanner: false,
home: Scaffold(
appBar : AppBar(title: Text("Title")), //앱의 상단 타이틀
body : Container( //Conainer에 넣어서 마진이나 패딩을 주도록 함.
child: Column( //세로로 위젯들 배열
children: <Widget>[
Text("$counter"),
RaisedButton(
child: Text(
"Add $counter",
style: TextStyle(color: Colors.white),
),
color: Colors.red,
onPressed:(){ //클릭할 때 마다 counter 변수가 변하도록~!
increaseCounter();
},
),
],
),
),
),
);
}
}
문제: 버튼 아무리 눌러도 위젯 변하지 않음.
<- Stateless Widget을 사용했기 때문!
이렇게 위젯이 변하는 경우에는 StatefulWidget을 사용해야 함.
(2) StatefulWidget (다시~!)
State & Wiget으로 나뉜다. -> 변화하는 부분만 따로 관리!
실제 UI 그리는 코드는 State 쪽에 있음.
import 'package:flutter/material.dart';
void main() => runApp(new MyApp()); // 앱 실행
class MyApp extends StatefulWidget{ // Widget 과 State를 다루는 부분은 분리되어 있음
@override
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
int counter = 0;
void increaseCounter(){
setState(() {
counter++;
});
}
void decreaseCounter(){
setState(() {
counter--;
});
}
@override
Widget build(BuildContext context) {
return MaterialApp(
title: "First Stateful App",
home: Scaffold(
appBar: AppBar(
title : Text("My StatefulWidget"),
),
body : Container(
padding: const EdgeInsets.all(16.0), // 16씩 패딩
child: Column(
children: <Widget>[
Text(
"$counter",
style: TextStyle(fontSize: 160.0)
),
Row( //가로로 위젯 배치
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
children: <Widget>[
RaisedButton(
child: Text(
"Add",
style: TextStyle(color: Colors.white),
),
color : Colors.red,
onPressed: (){
increaseCounter();
},
),
RaisedButton(
child: Text(
"Subtract",
style: TextStyle(color: Colors.white),
),
color: Colors.blue,
onPressed: (){
decreaseCounter();
},
),
],
),
],
),
),
),
);
}
}
* 참고: https://software-creator.tistory.com/10?category=681555
'아카이브' 카테고리의 다른 글
[2020 정보처리기사 필기] 2.1.35 데이터저장소/데이터베이스/DBMS (0) | 2020.03.27 |
---|---|
[2020 정보처리기사 필기] 2.1.34 자료구조 (0) | 2020.03.27 |
[알고리즘] 알고스팟 PICNIC 문제 (0) | 2020.03.27 |
[알고리즘] 알고스팟 BOGGLE문제 (0) | 2020.03.26 |
[Android Studio] ‘cannot resolve symbol’ error (0) | 2020.02.13 |