๐ŸŒžโญ๐ŸŒœ๐ŸŒˆ
๋‰ด์ฐจํŠธ
๐ŸŒžโญ๐ŸŒœ๐ŸŒˆ
  • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ
    • Flutter
    • Android
    • Algorithm
      • Python
    • Test
    • Python
    • ์ƒ์‚ฐ์„ฑ
    • ๊ฒฝ์ œ
    • ์˜์–ด
    • ์ƒํ™œ ํŒ

๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

  • ํ™ˆ
  • ํƒœ๊ทธ
  • ๋ฐฉ๋ช…๋ก

๊ณต์ง€์‚ฌํ•ญ

ํƒœ๊ทธ

  • ์ผ์ฐ ์ž๋Š” ๋ฒ•
  • ๊ฐ“์ƒ
  • getx
  • PYTHON
  • flutter 2.0
  • ๋„ค์ด๋น„ ์”ฐ ์ผ์ฐ ์ž๋Š” ๋ฒ•
  • Firebase
  • cruscal
  • ์ฐฝ์—…๋ถ€ํŠธ์บ ํ”„
  • Flutter ์˜ ์—ญ์‚ฌ
  • Flutter ๊ณผ๊ฑฐ
  • Flutter ํ˜„์žฌ
  • ๋ผ์ดํ”„ํ•ดํ‚น์Šค์ฟจ
  • Image.memory
  • bloc
  • ์ฐฝ๋ถ€์บ 
  • ํŒŒ์ด์ฌ
  • null safety
  • flutter
  • python ๋‚ด์žฅํ•จ์ˆ˜
  • ํŠน์ง•
  • AssetThumb
  • enum
  • flutter webview
  • Flutter pattern
  • Flutter Web
  • Python ๋‚ด์žฅ ํ•จ์ˆ˜
  • Android
  • Flutter ๊ธฐ์ดˆ ์‹œ๋ฆฌ์ฆˆ
  • Flutter ๋ฏธ๋ž˜

์ตœ๊ทผ ๋Œ“๊ธ€

ํ‹ฐ์Šคํ† ๋ฆฌ

hELLO ยท Designed By ์ •์ƒ์šฐ.
๐ŸŒžโญ๐ŸŒœ๐ŸŒˆ

๋‰ด์ฐจํŠธ

Flutter / 3ํƒ„ : Flutter์˜ UI์— ๊ด€ํ•˜์—ฌ
Flutter

Flutter / 3ํƒ„ : Flutter์˜ UI์— ๊ด€ํ•˜์—ฌ

2020. 7. 24. 21:18

 

์ด๋ฒˆ์—๋Š” Flutter์˜ UI์— ๊ด€ํ•˜์—ฌ ๊ณต๋ถ€๋ฅผ ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

๋งŒ์•ฝ Flutter๊ฐ€ ๋ฌด์—‡์ธ์ง€ ์ž˜ ๋ชจ๋ฅด์‹œ๋Š” ๋ถ„๋“ค์€ ์•„๋ž˜์˜ ๊ธ€์„ ๋จผ์ € ์ฝ๊ณ  ์™€์ฃผ์‹œ๊ธธ ๋ฐ”๋ž๋‹ˆ๋‹ค.

 

Flutter / 2ํƒ„ : Flutter ํŠน์ง•๊ณผ ์žฅ๋‹จ์ 

 

Flutter / 2ํƒ„ : Flutter ํŠน์ง•๊ณผ ์žฅ๋‹จ์ 

์ด๋ฒˆ์—๋Š” Flutter์˜ ํŠน์ง•๊ณผ ์žฅ๋‹จ์ ์— ๋Œ€ํ•ด์„œ ๊ณต๋ถ€๋ฅผ ํ•˜์˜€๊ณ  ์—ฌ๋Ÿฌ๋ถ„๋“ค๊ณผ ๊ณต์œ ํ•˜๊ณ ์ž ํ•ฉ๋‹ˆ๋‹ค.

medium.com

 

๋ชฉ์ฐจ

  1. ๋ชจ๋“  ๊ฒƒ์ด Widget
  2. ์„ ์–ธ์  UI ๋ฐฉ์‹
  3. Stateless, Stateful Widget
  4. ํ™”๋ฉด ์ „ํ™˜ (Navigator์™€ Route)
  5. Stateful Widget์˜ Lifecycle (์ƒ๋ช…์ฃผ๊ธฐ)
  6. ๋ ˆ์ด์•„์›ƒ ๋ฐฐ์น˜ ๋ฐฉ๋ฒ•
  7. ๋งˆ์น˜๋ฉด์„œ

 

๋ชจ๋“  ๊ฒƒ์ด Widget

Flutter์—์„œ UI ์„ ์–ธ ๋ฐ ๊ตฌ์„ฑ๋ฐฉ์‹๊ณผ ๊ด€๋ จ๋œ ๋ชจ๋“  ๊ฒƒ์€ ์œ„์ ฏ์œผ๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ์Šต๋‹ˆ๋‹ค. ๋” ์‰ฝ๊ฒŒ ๋งํ•ด๋ณด์ž๋ฉด Java์—์„œ๋Š” ๋ชจ๋“  ๊ฐ์ฒด๊ฐ€ Object๋ผ๋Š” Class๋ฅผ ์ƒ์†๋ฐ›์Šต๋‹ˆ๋‹ค. ์ด์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ Flutter์—์„œ UI ์„ ์–ธ ๋ฐ ๊ตฌ์„ฑ๋ฐฉ์‹์— ๊ด€๋ จ๋œ ๋ชจ๋“  ๊ฒƒ๋“ค์€ Widget์„ ์ƒ์†๋ฐ›์Šต๋‹ˆ๋‹ค.

 

์„ ์–ธ์  UI ๋ฐฉ์‹ (declarative style of UI)

๊ธฐ์กด์— Android, IOS์—์„œ๋Š” ๋ช…๋ นํ˜• UI ๋ฐฉ์‹(imperative style of UI)์„ ํ†ตํ•ด UI๋ฅผ ์ž‘์„ฑํ•ด์™”์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ Flutter์—์„œ๋Š” React Native์™€ ๊ฐ™์€ ์„ ์–ธ์  UI(declarative style of UI) ๋ฐฉ์‹์„ ์ฑ„ํƒํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

 

์„ ์–ธ์  UI ๋ฐฉ์‹์ด๋ž€ UI ๊ฐ์ฒด๋ฅผ ์ง์ ‘ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, UI์˜ ์„ค๋ช…๋งŒ ์ž‘์„ฑํ•˜๋Š” ๋ฐฉ์‹์„ ๋œปํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ Render Object๋ฅผ ํ†ตํ•ด UI๊ฐ์ฒด ์ƒ์„ฑ๊ณผ ์œ ์ง€๋ฅผ ๋’ค์—์„œ ๊ด€๋ฆฌํ•ด์ค๋‹ˆ๋‹ค. ์ฆ‰ ์šฐ๋ฆฌ๋Š” UI ๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ๋˜๊ณ  ์œ ์ง€๋˜๋Š” ์„ธ์„ธํ•œ ์ž‘์—…์„ ๋ชฐ๋ผ๋„ ๋œ๋‹ค๋Š” ๊ฒƒ ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ƒฅ UI์— ๋Œ€ํ•œ ์„ค๋ช…์„ ์ž˜ ์ž‘์„ฑํ•˜๋ฉด ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ ๋‚˜๋จธ์ง€๋Š” ์•Œ์•„์„œ ํ•ด์ค๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ UI๊ฐ์ฒด ์ƒ์„ฑ๊ณผ ์œ ์ง€๋ฅผ ๊ด€๋ฆฌ๋ฅผ ํ•ด์ฃผ๊ธฐ ๋•Œ๋ฌธ์—, UI ๊ฐ์ฒด๋ฅผ ์ง์ ‘ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. (๋ถˆ๋ณ€) UI ๊ฐ์ฒด๋ฅผ ๋ณ€๊ฒฝํ•˜๋ ค๋ฉด UI์— ๋Œ€ํ•œ ์„ค๋ช…์„ ๋ณ€๊ฒฝํ•œ ํ›„ ๋‹ค์‹œ UI ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

 

์ด๋ฅผ Flutter๋กœ ์น˜ํ™˜ํ•˜๋ฉด “UI์— ๋Œ€ํ•œ ์„ค๋ช…์€ Widget์ด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๊ณ  Widget์„ ํ†ตํ•ด Flutter ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ ์ž๋™์œผ๋กœ UI๊ฐ์ฒด๋ฅผ ์ƒ์„ฑ๊ณผ ์œ ์ง€๋ฅผ ํ•ด์ค€๋‹ค. ๋งŒ์•ฝ ๋ณ€๊ฒฝ์‚ฌํ•ญ์ด ์ผ์–ด๋‚˜๋ฉด Widget์„ ๋ณ€๊ฒฝ์‹œํ‚ค๊ณ  UI ๊ฐ์ฒด๋ฅผ ๋‹ค์‹œ ์žฌ์ƒ์„ฑํ•œ๋‹ค.”  ์ •๋„๋กœ ์ •๋ฆฌํ•  ์ˆ˜ ์žˆ์„ ๋“ฏ ํ•ฉ๋‹ˆ๋‹ค.

 

Stateless, Stateful Widget

์œ„์ ฏ์€ ํฌ๊ฒŒ ๋‘ ๊ฐ€์ง€ Stateful, Stateless Widget์œผ๋กœ ๋‚˜๋ˆ„์ด๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์œ„์—์„œ Flutter๊ฐ€ ์„ ์–ธ์  UI ๋ฐฉ์‹์„ ํƒํ–ˆ๋‹ค๋Š” ๊ฒƒ์„ ๋ฐฐ์› ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ UI ๊ฐ์ฒด๋Š” ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†์œผ๋ฉฐ Widget์„ ๋ณ€๊ฒฝ ํ›„ ์žฌ์ƒ์„ฑํ•ด์•ผ๋œ๋‹ค๋Š” ์‚ฌ์‹ค์„ ์•„์‹ค ๊ฒƒ ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ด์— ๊ด€ํ•œ ๊ฐœ๋…์ด Stateless, Stateful Widget ์ž…๋‹ˆ๋‹ค.

 

Stateless, Stateful๋กœ ๊ฐœ๋…์ด ๋‚˜๋ˆ„์–ด์กŒ๋‹ค๊ณ  ํ•ด์„œ ๋‚ด๋ถ€๋™์ž‘์ด ๋‹ค๋ฅด๊ฒŒ ์ด๋ฃจ์–ด์ง€๋Š” ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค. ๋‘˜์€ ๋˜‘๊ฐ™์ด Widget์„ ์ƒ์†๋ฐ›์•˜๊ณ  ๋™์ผํ•˜๊ฒŒ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๋‚˜์ค‘์—๋„ ๋งํ•˜๊ฒ ์ง€๋งŒ Stateful Widget์€ State๋ผ๋Š” ์„œ๋ธŒํด๋ž˜์Šค๋ฅผ ๊ฐ–๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ด๊ฒƒ์ด Stateless Widget๊ณผ Stateful Widget๊ฐ„์˜ ์œ ์ผํ•œ ์ฐจ์ด์ž…๋‹ˆ๋‹ค.

 

Stateless Widget์— ๋Œ€ํ•ด ๋จผ์ € ๋งํ•ด๋ณด์ž๋ฉด ๋ง๊ทธ๋Œ€๋กœ ์ƒํƒœ์ •๋ณด๊ฐ€ ์—†๋Š” Widget์ž…๋‹ˆ๋‹ค. ์ฆ‰ ๋ณ€๊ฒฝ์ด ์ผ์–ด๋‚˜์ง€ ์•Š๋Š” Widget์ด๋ผ๋Š” ๊ฒƒ ์ž…๋‹ˆ๋‹ค. ๋ณ€๊ฒฝ์ด ์ผ์–ด๋‚˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์ƒํƒœ๋ฅผ ๊ตณ์ด ๊ด€์ฐฐํ•  ํ•„์š”๊ฐ€ ์—†๋Š” ๊ฒƒ ์ž…๋‹ˆ๋‹ค. ์•ฑ ํ™”๋ฉด์˜ ๋กœ๊ณ (AssetImageWidget)๋ฅผ ๋Œ€ํ‘œ์ ์ธ ์˜ˆ์‹œ๋กœ ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์•ฑ์ด ์‹คํ–‰๋˜๋Š” ๋™์•ˆ ์•ฑ ํ™”๋ฉด์˜ ๋กœ๊ณ ๊ฐ€ ๋ณ€๊ฒฝ๋˜๋Š” ์ผ์€ ์—†์Šต๋‹ˆ๋‹ค.

 

Stateful Widget์€ Stateless Widget๊ณผ ๋‹ค๋ฅด๊ฒŒ ์ƒํƒœ์ •๋ณด๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” Widget์ž…๋‹ˆ๋‹ค. Stateful Widgte์€ State๋ผ๋Š” ์„œ๋ธŒ ํด๋ž˜์Šค๋ฅผ ํ†ตํ•ด ์ƒํƒœ์ •๋ณด๋ฅผ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. ๋งŒ์•ฝ ๋ณ€๊ฒฝ์ด ์ผ์–ด๋‚  ์‹œ์—๋Š” setState() ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ State ์ •๋ณด๋ฅผ ๋ณ€๊ฒฝ์‹œํ‚ต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ ๋ณ€๊ฒฝ์„ ๊ฐ์ง€ํ•˜์—ฌ ํ•ด๋‹น UI ๊ฐ์ฒด๋ฅผ ์žฌ์ƒ์„ฑํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด Text๊ฐ€ ๋ฐ”๋€Œ๋Š” ๋“ฑ์˜ ๋™์ž‘์„ ๋Œ€ํ‘œ์ ์ธ ์˜ˆ์‹œ๋กœ ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

์•„๋ž˜๋Š” Stateless, Stateful Widget์˜ ์˜ˆ์‹œ์ž…๋‹ˆ๋‹ค.

import 'package:flutter/material.dart';
void main() {
  runApp(SampleApp());
}
class SampleApp extends StatelessWidget {  // ์ตœ์ƒ์œ„ Widget์€ ๋ณ€๊ฒฝ์ด ์—†์Œ์œผ๋กœ Stateless Widget
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Sample App',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: SampleAppPage(),
    );
  }
}
class SampleAppPage extends StatefulWidget {
  SampleAppPage({Key key}) : super(key: key);
  @override
  _SampleAppPageState createState() => _SampleAppPageState();
}
class _SampleAppPageState extends State<SampleAppPage> {
  // Default placeholder text
  String textToShow = "I Like Flutter";
  void _updateText() {
    setState(() {  // State ๋ณ€๊ฒฝ
      textToShow = "Flutter is Awesome!";
    });
  }
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text("Sample App"),
      ),
      body: Center(child: Text(textToShow)),
      floatingActionButton: FloatingActionButton(
        onPressed: _updateText,
        tooltip: 'Update Text',
        child: Icon(Icons.update),
      ),
    );
  }
}

 

ํ™”๋ฉด์ „ํ™˜ (Navigator, Route)

ํ•˜๋‚˜์˜ ํ™”๋ฉด์œผ๋กœ ๋™์ž‘๋˜๋Š” ์•ฑ์€ ์ •๋ง ๊ฑฐ์˜ ์—†์Šต๋‹ˆ๋‹ค. ๊ทธ๋ ‡๊ธฐ์— ํ™”๋ฉด์„ ์ „ํ™˜ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์€ ์•ฑ์˜ ๊ธฐ๋ณธ์ค‘์— ๊ธฐ๋ณธ์ด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  Flutter์—์„œ๋Š” Navigator์™€ Route๋ฅผ ํ†ตํ•ด ํ™”๋ฉด์ „ํ™˜์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. Route๋Š” ํ™”๋ฉด์— ๋Œ€ํ•œ ์ถ”์ƒํ™”์ด๋ฉฐ Navigator๋Š” Rotue๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ์œ„์ ฏ์ž…๋‹ˆ๋‹ค.

 

Route๋Š” ์ด๋ฆ„ ๊ทธ๋Œ€๋กœ ํ™”๋ฉด์„ ํŒŒ์ผ ๊ฒฝ๋กœ์ฒ˜๋Ÿผ ์ถ”์ƒํ™”ํ•œ ๊ฒƒ ์ž…๋‹ˆ๋‹ค. ๋ณดํ†ต ‘/login’, ‘/home’ ๊ณผ ๊ฐ™์ด ๊ฒฝ๋กœ๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  Map์„ ํ†ตํ•ด์„œ ๊ฒฝ๋กœ์™€ ํ•ด๋‹น ํ™”๋ฉด์„ ๋งค์นญ์‹œํ‚ต๋‹ˆ๋‹ค.

 

๋‹ค์Œ์€ Map์„ ์ด์šฉํ•˜์—ฌ Route๋ฅผ ์„ ์–ธํ•˜๋Š” ์˜ˆ์‹œ์ž…๋‹ˆ๋‹ค.

void main() {
 runApp(MaterialApp(
   home: MyAppHome(), // becomes the route named '/'
   routes: <String, WidgetBuilder> {
     '/a': (BuildContext context) => MyPage(title: 'page A'),
     '/b': (BuildContext context) => MyPage(title: 'page B'),
     '/c': (BuildContext context) => MyPage(title: 'page C'),
   },
 ));
}

 

Navigator๋Š” ์Šคํƒ์œผ๋กœ Route๋ฅผ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.push(), pop()์„ ํ†ตํ•ด ํ™”๋ฉด ๊ฒฝ๋กœ๋ฅผ ์กฐ์ ˆํ•ฉ๋‹ˆ๋‹ค. push(route)๋ฅผ ํ•˜๋ฉด ํ•ด๋‹น Route๋กœ ํ™”๋ฉด์„ ์ด๋™ํ•  ์ˆ˜ ์žˆ๊ณ , pop()์„ ํ•˜๋ฉด ์ด์ „ Route๋กœ ๋Œ์•„๊ฐˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ์€ Navigator๋ฅผ ํ†ตํ•ด ํ™”๋ฉด์„ ์ด๋™ํ•˜๋Š” ์˜ˆ์‹œ์ž…๋‹ˆ๋‹ค.

Navigator.of(context).pushNamed('/b');

 

Stateful Widget์˜ Lifecycle (์ƒ๋ช…์ฃผ๊ธฐ)

Android๋ฅผ ์ ‘ํ•ด๋ณด์‹  ๋ถ„๋“ค์€ Lifecycle์— ์ต์ˆ˜ํ•˜์‹ค ๊ฒƒ ์ž…๋‹ˆ๋‹ค. Lifecycle์€ ๋ง๊ทธ๋Œ€๋กœ ์ƒ๋ช…์ฃผ๊ธฐ๋ฅผ ๋œปํ•ฉ๋‹ˆ๋‹ค. ์ธ๊ฐ„์œผ๋กœ ๋”ฐ์ง€๋ฉด (์•„๊ธฐ -> ์ฒญ๋…„ -> ์ค‘๋…„ -> ๋…ธ์ธ -> ์ฃฝ์Œ)์„ Lifecycle์ด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Lifecycle์ด ํ•„์š”ํ•œ ์ด์œ ๋Š” ์œ„์˜ ์ธ๊ฐ„์˜ ์˜ˆ์‹œ๋ฅผ ๋“ค๋ฉด ์‰ฝ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

1. ์•„๊ธฐ๋•Œ๋Š” ์ง€์‹์„ ์Šต๋“ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

2. ์ฒญ๋…„๋•Œ๋Š” ๊ฟˆ์„ ์ด๋ฃจ๊ธฐ ์œ„ํ•ด ๋…ธ๋ ฅํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

3. ์ค‘๋…„๋•Œ๋Š” ์•ˆ์ •์„ ๊ฐ–์ถ”๊ณ  ๋‚จ์—๊ฒŒ ๋„์›€์ด ๋˜๊ณ ์ž ๋…ธ๋ ฅํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

4. ๋…ธ์ธ๋•Œ๋Š” ์ฃฝ์Œ์„ ์ค€๋น„ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

 

์œ„์˜ ์˜ˆ์‹œ์ฒ˜๋Ÿผ Lifecycle์ด ์žˆ์œผ๋ฉด ๊ฐ๊ฐ์˜ ์ฃผ๊ธฐ๋งˆ๋‹ค ํ•  ํ–‰๋™์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Stateless Widget์€ ์ด๋Ÿฐ Lifecycle์— ์‹ ๊ฒฝ์“ธ ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ์–ด์ฐจํ”ผ ๋ณ€๊ฒฝ์ด ์ผ์–ด๋‚˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— Framework์—๊ฒŒ 100% ๋งก๊ธฐ๋ฉด ๋˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๋ณ€๊ฒฝ์ด ์ผ์–ด๋‚˜๋Š” Stateful Widget์—๊ฒŒ๋Š” Lifecyle์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

 

์•„๋ž˜๋Š” StatefulWidge์˜ Lifecycle์ž…๋‹ˆ๋‹ค.

  1. createState()
    State ๊ฐ์ฒด๊ฐ€ ์ตœ์ดˆ๋กœ ์ƒ์„ฑ๋˜๋Š” ์‹œ์  BuildContext๊ฐ€ State์— ํ• ๋‹น๋œ๋‹ค.
  2. mounted == true
    BuildContext๊ฐ€ State์— ํ• ๋‹น๋๋Š”์ง€ ํ™•์ธํ•œ๋‹ค.
    ํ• ๋‹น๋์œผ๋ฉด State๊ฐ€ ๋งˆ์šดํŠธ๋œ ๊ฒƒ์œผ๋กœ ๋ณด๊ณ  true๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
  3. initState()
    ์ด Lifecycle๋•Œ Widget ํ˜น์€ BuildContext ์ดˆ๊ธฐํ™”ํ•˜๋ฉด ๋œ๋‹ค.
  4. didChangeDependencies()
    ์ƒ์†ํ•œ Widget์ด ์—…๋ฐ์ดํŠธ๋ ๋•Œ ํ˜ธ์ถœ๋œ๋‹ค.
  5. build()
    Widget์„ ๋ฆฌํ„ดํ•˜๋ฉฐ ์ด๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ Framework๊ฐ€ UI๋ฅผ ๊ทธ๋ฆฐ๋‹ค.
  6. didUpdateWidget()
    Widget์— ๋ณ€๊ฒฝ์ด ์žˆ์„๋•Œ ํ˜ธ์ถœ๋œ๋‹ค.
  7. setState()
    ์œ„์—์„œ๋„ ๋ดค๋˜ ํ•จ์ˆ˜๋กœ ํ”„๋ ˆ์ž„์›Œํฌ์— ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ์•Œ๋ฆฐ๋‹ค.
  8. deactivatie()
    State ๊ฐ์ฒด๊ฐ€ ์‚ญ์ œ๋œ๋‹ค.
    ์‚ญ์ œ๋˜๋Š” ์• ๋‹ˆ๋ฉ”์ด์…˜ ํ”„๋ ˆ์ž„์ด ๋๋‚˜๊ธฐ ์ „์— ์žฌ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
  9. dispose()
    State ๊ฐ์ฒด๊ฐ€ ํŠธ๋ฆฌ์—์„œ ์˜๊ตฌ์ ์œผ๋กœ ์‚ญ์ œ๋œ๋‹ค.
  10. mounted == false
    State์˜ ๋งˆ์šดํŠธ๊ฐ€ ์™„์ „ํžˆ ํ•ด์ œ๋๋‹ค.

์ž์„ธํ•œ ์‚ฌํ•ญ์€ ์•„๋ž˜์˜ ๋ฌธ์„œ๋ฅผ ์ฐธ๊ณ ํ•ด์ฃผ์„ธ์š”

State class API

 

State class - widgets library - Dart API

The logic and internal state for a StatefulWidget. State is information that (1) can be read synchronously when the widget is built and (2) might change during the lifetime of the widget. It is the responsibility of the widget implementer to ensure that th

api.flutter.dev

 

๋ ˆ์ด์•„์›ƒ ๋ฐฐ์น˜ ๋ฐฉ๋ฒ•

์ด์™ธ์— ๊ธฐํƒ€๋กœ UI๋ฅผ ๋ฐฐ์น˜ํ•˜๋Š” ๋ฒ•์— ๋Œ€ํ•ด์„œ ๋งํ•ด๋ณด์ž๋ฉด Flutter์—์„œ๋Š” Widget Tree๋ฅผ ์ด์šฉํ•ด์„œ ๋ฐฐ์น˜๋ฅผ ํ•ฉ๋‹ˆ๋‹ค.

์ž์„ธํ•œ ์‚ฌํ•ญ์€ ์•„๋ž˜์˜ ์ฝ”๋“œ๋ฅผ ๋ณด๋ฉด ์‰ฝ๊ฒŒ ์ดํ•ดํ•˜์‹ค ์ˆ˜ ์žˆ์„ ๊ฒƒ ์ž…๋‹ˆ๋‹ค.

@override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text("Sample App"),
      ),
      body: Center( // ์—ฌ๊ธฐ์— ์ง‘์ค‘
        child: MaterialButton(
          onPressed: () {}, // ์ด๋Ÿฐ์‹์˜ Tree ๋ฐฉ์‹์œผ๋กœ UI๋ฅผ ๊ตฌ์„ฑํ•จ
          child: Text('Hello'),
          padding: EdgeInsets.only(left: 10.0, right: 10.0),
        ),
      ),
    );
  }

์—ฌ๊ธฐ๊นŒ์ง€๊ฐ€ Flutter์˜ UI์— ๋Œ€ํ•œ ์„ค๋ช…์ด์—ˆ์Šต๋‹ˆ๋‹ค.

์„ค๋ช…์ด ๋ถ€์กฑํ•˜์‹  ๋ถ„์€ ์•„๋ž˜ ๋งํฌ๋ฅผ ์ฐธ๊ณ ํ•ด์ฃผ์„ธ์š”

๊ทธ๋ฆฌ๊ณ  ์ž˜๋ชป๋œ ์„ค๋ช…์„ ๋ฐœ๊ฒฌํ•˜์‹  ๋ถ„์€ ๋Œ“๊ธ€๋กœ ์ง€์ ํ•ด์ฃผ์‹œ๋ฉด ๊ฐ์‚ฌํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค :)

 

Introduction to widget

 

Introduction to widgets

Learn about Flutter's widgets.

flutter.dev

 

๋งˆ์น˜๋ฉด์„œ

์ €๋Š” Google์ด ๋งŒ๋“ค์—ˆ๋‹ค๊ณ  ํ•˜์—ฌ์„œ Android์™€ ๋น„์Šทํ•œ ๋ถ€๋ถ„์ด ๋งŽ์„ ์ค„ ์•Œ์•˜๋Š”๋ฐ ์ „ํ˜€ ์•„๋‹ˆ์˜€์Šต๋‹ˆ๋‹ค.

์˜คํžˆ๋ ค React Native์—๊ฒŒ ํฐ ์˜ํ–ฅ์„ ๋ฐ›์€ ๋“ฏ ํ•ฉ๋‹ˆ๋‹ค.

Flutter์— ์žˆ๋Š” ๋งŽ์€ ๋ฐฉ์‹๋“ค์ด React Native์™€ ๋‹ฎ์•„์žˆ์Šต๋‹ˆ๋‹ค. (์„ ์–ธ์  UI ๋ฐฉ์‹, Router ๋ฐฉ์‹, ๋“ฑ๋“ฑ)

๊ฐ€๋ฉด ๊ฐˆ์ˆ˜๋ก Flutter๊ฐ€ ํฅ๋ฏธ๋กœ์›Œ์ง€๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ใ…Žใ…Ž

๋‹ค์Œํ™”์—์„œ๋Š” Background์— ๋Œ€ํ•ด ๋‹ค๋ค„๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค :)

'Flutter' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

Flutter Provider + '?' ํŒจํ„ด (feat. ChangeNotifier, Mobx, BLoC, etc..)  (0) 2020.09.12
Flutter / 4ํƒ„ : Flutter์˜ ์ƒํƒœ๊ด€๋ฆฌ  (0) 2020.08.01
Dart / 1ํƒ„ : Dart์˜ ์ค‘์š”ํ•œ ๊ฐœ๋…  (0) 2020.07.26
Flutter / 2ํƒ„ : Flutter ํŠน์ง•๊ณผ ์žฅ๋‹จ์   (0) 2020.07.24
Flutter / 1ํƒ„ : Flutter ์‹œ์ž‘, ์„ค์น˜ํ•˜๊ธฐ (Window, Android Studio)  (0) 2020.07.24
    'Flutter' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
    • Flutter / 4ํƒ„ : Flutter์˜ ์ƒํƒœ๊ด€๋ฆฌ
    • Dart / 1ํƒ„ : Dart์˜ ์ค‘์š”ํ•œ ๊ฐœ๋…
    • Flutter / 2ํƒ„ : Flutter ํŠน์ง•๊ณผ ์žฅ๋‹จ์ 
    • Flutter / 1ํƒ„ : Flutter ์‹œ์ž‘, ์„ค์น˜ํ•˜๊ธฐ (Window, Android Studio)
    ๐ŸŒžโญ๐ŸŒœ๐ŸŒˆ
    ๐ŸŒžโญ๐ŸŒœ๐ŸŒˆ

    ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”