【Flutter】 처음 Flutter로 카운트 앱을 만들어 보았습니다.
소개
이 기사는 "HTC Advent Calendar 2020"의 첫 번째 기사입니다.
쓰기는 HTC 팀의 개발 담당자입니다.
평소에는 SI 기업에 근무하고 인프라 엔지니어로 일하고 있습니다.
이번에는 팀 멤버의 기술 향상을 위해 어드벤트 캘린더에 팀으로 참가해 보기로 했습니다.
아니 HTC란 무엇인가? !라는 느낌이라고 생각하기 때문에, HTC에 대해서 간단하게 접해 두겠네요.
「 ONE JAPAN HACKATHON 2020 」라는 해커슨에 참가했을 때에 결성된 팀입니다.
Hackason으로 만든 작품에 대해서는 팀원이 기사를 써주고 있으므로, 흥미가 있는 분은 이쪽을 봐 주세요.
본 기사는 타이틀에도 기재하고 있는 대로, 처음으로 Flutter를 해 보았다고 하는 내용입니다.
비슷한 기사가 많고 신규성은 전혀 없지만 개인적인 출력과 후학을 위해 쓰게 됩니다.
대상 독자
실행 환경
Flutter란?
Google에서 제공하는 UI 툴킷입니다. 모바일 웹 및 데스크톱처럼 네이티브 컴파일된 아름다운 애플리케이션을 단일 코드베이스에서 구축할 수 있다고 합니다.
이번에 만드는 것
버튼이 2개 있고, 덧셈과 뺄셈을 할 수 있는 카운트 앱을 만듭니다.
앱 구현
먼저 새 Flutter 프로젝트를 만들고 다음과 같은 화면이 표시되는지 확인합니다.
버튼 추가
그런 다음 버튼을 추가합니다. 이번에는 RaisedButton을 사용합니다..icon()
를 사용하면 아이콘이 있는 버튼이 됩니다.Icons.add_circle
에서 아이콘을 선택할 수 있습니다. 여기 에서 아이콘 목록을 확인할 수 있습니다.onPressed: _incrementCounter
: 버튼을 터치했을 때의 처리를 지정할 수 있습니다.
main.dart// ... 略
class _MyHomePageState extends State<MyHomePage> {
// ... 略
@override
Widget build(BuildContext context) {
// ... 略
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text(
'You have pushed the button this many times:',
),
Text(
'$_counter',
style: Theme.of(context).textTheme.headline4,
),
Row(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
RaisedButton.icon(
icon: const Icon(
Icons.add_circle,
color: Colors.white,
),
label: const Text('Plus'),
onPressed: _incrementCounter,
color: Colors.red,
textColor: Colors.white,
),
SizedBox(width: 30),
RaisedButton.icon(
icon: const Icon(
Icons.remove_circle,
color: Colors.white,
),
label: const Text('minus'),
onPressed: _decrement,
color: Colors.blue,
textColor: Colors.white,
),
],
),
// ... 略
}
}
버튼 추가 후에는 이런 화면이 되어 있다고 생각합니다.
모든 파트가 중앙에 가까워지고 있습니다만, 우선 버튼의 배치는 완료입니다.
마이너스 처리 추가
버튼을 누를 때마다 가산되는 처리는 처음부터 구현되어 있으므로 여기에서는 감산 처리를 추가합니다.
main.dartclass _MyHomePageState extends State<MyHomePage> {
int _counter = 0;
void _incrementCounter() {
setState(() {
_counter++;
});
}
void _decrement() {
setState(() {
_counter--;
});
}
// ... 略
}
레이아웃 변경
마지막으로 쉽게 레이아웃을 정돈합니다. 몇 가지 방법이 있는 것 같지만 이번에는 Spacer와 SizedBox를 사용했습니다.Spacer
는 문자 그대로 공백을 취하는 위젯입니다. Row
또는 Column
위젯에서 mainAxisAlignment
속성만으로는 제어할 수 없는 레이아웃을 만들 때 자주 사용되는 것 같습니다.SizedBox
위젯은 지정된 크기의 상자를 만들 수 있습니다. 속성은 width
, height
, child
뿐입니다.
main.dartclass _MyHomePageState extends State<MyHomePage> {
// ... 略
@override
Widget build(BuildContext context) {
// ... 略
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Spacer(
flex: 2,
),
Text(
'You have pushed the button this many times:',
),
Text(
'$_counter',
style: Theme.of(context).textTheme.headline4,
),
Spacer(),
Row(
mainAxisAlignment: MainAxisAlignment.center,
// ... 略
),
Spacer(),
],
),
),
);
}
}
레이아웃을 변경한 결과는 다음과 같습니다. 쉽게 버튼과 텍스트 사이에 공백을 찍을 수있었습니다.
(Flutter 초보자 지나서, 이러한 앱 설계가 올바른지 모르기 때문에, 누군가 자세한 쪽이 있으면 가르쳐 주셨으면 합니다.)
참고문헌
Flutter Doc KR
htps : // f ぅ라고 r. ctr의 st. 코 m/바시 c/
Reference
이 문제에 관하여(【Flutter】 처음 Flutter로 카운트 앱을 만들어 보았습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/takois/items/d5b8b036d3b6541a4f63
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
버튼이 2개 있고, 덧셈과 뺄셈을 할 수 있는 카운트 앱을 만듭니다.
앱 구현
먼저 새 Flutter 프로젝트를 만들고 다음과 같은 화면이 표시되는지 확인합니다.
버튼 추가
그런 다음 버튼을 추가합니다. 이번에는 RaisedButton을 사용합니다..icon()
를 사용하면 아이콘이 있는 버튼이 됩니다.Icons.add_circle
에서 아이콘을 선택할 수 있습니다. 여기 에서 아이콘 목록을 확인할 수 있습니다.onPressed: _incrementCounter
: 버튼을 터치했을 때의 처리를 지정할 수 있습니다.
main.dart// ... 略
class _MyHomePageState extends State<MyHomePage> {
// ... 略
@override
Widget build(BuildContext context) {
// ... 略
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text(
'You have pushed the button this many times:',
),
Text(
'$_counter',
style: Theme.of(context).textTheme.headline4,
),
Row(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
RaisedButton.icon(
icon: const Icon(
Icons.add_circle,
color: Colors.white,
),
label: const Text('Plus'),
onPressed: _incrementCounter,
color: Colors.red,
textColor: Colors.white,
),
SizedBox(width: 30),
RaisedButton.icon(
icon: const Icon(
Icons.remove_circle,
color: Colors.white,
),
label: const Text('minus'),
onPressed: _decrement,
color: Colors.blue,
textColor: Colors.white,
),
],
),
// ... 略
}
}
버튼 추가 후에는 이런 화면이 되어 있다고 생각합니다.
모든 파트가 중앙에 가까워지고 있습니다만, 우선 버튼의 배치는 완료입니다.
마이너스 처리 추가
버튼을 누를 때마다 가산되는 처리는 처음부터 구현되어 있으므로 여기에서는 감산 처리를 추가합니다.
main.dartclass _MyHomePageState extends State<MyHomePage> {
int _counter = 0;
void _incrementCounter() {
setState(() {
_counter++;
});
}
void _decrement() {
setState(() {
_counter--;
});
}
// ... 略
}
레이아웃 변경
마지막으로 쉽게 레이아웃을 정돈합니다. 몇 가지 방법이 있는 것 같지만 이번에는 Spacer와 SizedBox를 사용했습니다.Spacer
는 문자 그대로 공백을 취하는 위젯입니다. Row
또는 Column
위젯에서 mainAxisAlignment
속성만으로는 제어할 수 없는 레이아웃을 만들 때 자주 사용되는 것 같습니다.SizedBox
위젯은 지정된 크기의 상자를 만들 수 있습니다. 속성은 width
, height
, child
뿐입니다.
main.dartclass _MyHomePageState extends State<MyHomePage> {
// ... 略
@override
Widget build(BuildContext context) {
// ... 略
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Spacer(
flex: 2,
),
Text(
'You have pushed the button this many times:',
),
Text(
'$_counter',
style: Theme.of(context).textTheme.headline4,
),
Spacer(),
Row(
mainAxisAlignment: MainAxisAlignment.center,
// ... 略
),
Spacer(),
],
),
),
);
}
}
레이아웃을 변경한 결과는 다음과 같습니다. 쉽게 버튼과 텍스트 사이에 공백을 찍을 수있었습니다.
(Flutter 초보자 지나서, 이러한 앱 설계가 올바른지 모르기 때문에, 누군가 자세한 쪽이 있으면 가르쳐 주셨으면 합니다.)
참고문헌
Flutter Doc KR
htps : // f ぅ라고 r. ctr의 st. 코 m/바시 c/
Reference
이 문제에 관하여(【Flutter】 처음 Flutter로 카운트 앱을 만들어 보았습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/takois/items/d5b8b036d3b6541a4f63
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
// ... 略
class _MyHomePageState extends State<MyHomePage> {
// ... 略
@override
Widget build(BuildContext context) {
// ... 略
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text(
'You have pushed the button this many times:',
),
Text(
'$_counter',
style: Theme.of(context).textTheme.headline4,
),
Row(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
RaisedButton.icon(
icon: const Icon(
Icons.add_circle,
color: Colors.white,
),
label: const Text('Plus'),
onPressed: _incrementCounter,
color: Colors.red,
textColor: Colors.white,
),
SizedBox(width: 30),
RaisedButton.icon(
icon: const Icon(
Icons.remove_circle,
color: Colors.white,
),
label: const Text('minus'),
onPressed: _decrement,
color: Colors.blue,
textColor: Colors.white,
),
],
),
// ... 略
}
}
class _MyHomePageState extends State<MyHomePage> {
int _counter = 0;
void _incrementCounter() {
setState(() {
_counter++;
});
}
void _decrement() {
setState(() {
_counter--;
});
}
// ... 略
}
class _MyHomePageState extends State<MyHomePage> {
// ... 略
@override
Widget build(BuildContext context) {
// ... 略
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Spacer(
flex: 2,
),
Text(
'You have pushed the button this many times:',
),
Text(
'$_counter',
style: Theme.of(context).textTheme.headline4,
),
Spacer(),
Row(
mainAxisAlignment: MainAxisAlignment.center,
// ... 略
),
Spacer(),
],
),
),
);
}
}
Flutter Doc KR
htps : // f ぅ라고 r. ctr의 st. 코 m/바시 c/
Reference
이 문제에 관하여(【Flutter】 처음 Flutter로 카운트 앱을 만들어 보았습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/takois/items/d5b8b036d3b6541a4f63텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)