๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๐Ÿ“ฑ Mobile/ํ”Œ๋Ÿฌํ„ฐ ์•ฑํ”„๋กœ๊ทธ๋ž˜๋ฐ

ํ”Œ๋Ÿฌํ„ฐ ์•ฑํ”„๋กœ๊ทธ๋ž˜๋ฐ Day3

ํ”Œ๋Ÿฌํ„ฐ ์•ฑํ”„๋กœ๊ทธ๋ž˜๋ฐ Day3

ํ”Œ๋Ÿฌํ„ฐ ํ”„๋กœ์ ํŠธ๋ฅผ ๋งŒ๋“ค๋ฉด ๋งŽ์€ ํŒŒ์ผ๊ณผ ํด๋”๊ฐ€ ์ž๋™์œผ๋กœ ์ƒ์„ฑ๋œ๋‹ค.

์ด๋Ÿฌํ•œ ํ”Œ๋Ÿฌํ„ฐ ํ”„๋กœ์ ํŠธ์˜ ๊ตฌ์„ฑ์„ ์‚ดํŽด๋ณด๋„๋ก ํ•œ๋‹ค.

 

๊ทธ๋ฆฌ๊ณ , ํ”Œ๋Ÿฌํ„ฐ ์•ฑ ๊ฐœ๋ฐœ์—์„œ ํ•ต์‹ฌ์ธ ์œ„์ ฏ๊ณผ ์ƒ๋ช…์ฃผ๊ธฐ๋ฅผ ์•Œ์•„๋ณด๋ ค๊ณ  ํ•œ๋‹ค. 

 

 

ํ”Œ๋Ÿฌํ„ฐ ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ

ํด๋” ๋‚ด์šฉ ๋น„๊ณ 
android ์•ˆ๋“œ๋กœ์ด๋“œ ํ”„๋กœ์ ํŠธ ๊ด€๋ จ ํŒŒ์ผ ์•ˆ๋“œ๋กœ์ด๋“œ ์ŠคํŠœ๋””์˜ค๋กœ ์‹คํ–‰ ๊ฐ€๋Šฅ
iOS iOS ํ”„๋กœ์ ํŠธ ๊ด€๋ จ ํŒŒ์ผ ์—‘์Šค์ฝ”๋“œ๋กœ ์‹คํ–‰ ๊ฐ€๋Šฅ(๋งฅ ์ „์šฉ)
lib  ํ”Œ๋Ÿฌํ„ฐ ์•ฑ ๊ฐœ๋ฐœ์„ ์œ„ํ•œ ๋‹คํŠธ ํŒŒ์ผ ํ”Œ๋Ÿฌํ„ฐ SDK ์„ค์น˜ ํ•„์š”
test ํ”Œ๋Ÿฌํ„ฐ ์•ฑ ๊ฐœ๋ฐœ ์ค‘ ํ…Œ์ŠคํŠธ ํŒŒ์ผ ํ…Œ์ŠคํŠธ ํŽธ์˜์„ฑ ์ œ๊ณต

 

๋ฃจํŠธ์—์„œ๋„ ์—ฌ๋Ÿฌ ํŒŒ์ผ์ด ์žˆ์ง€๋งŒ, ์—ฌ๊ธฐ์„œ ์ฃผ๋ชฉํ•  ํŒŒ์ผ์€ pubspec.yaml์ด๋‹ค. 

pubspec.yaml ํŒŒ์ผ์€ ํ”Œ๋Ÿฌํ„ฐ์—์„œ ๋‹ค์–‘ํ•œ ํŒจํ‚ค์ง€์™€ ์ด๋ฏธ์ง€, ํฐํŠธ ๋“ฑ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค€๋‹ค.

 

 

 

 

 

์ƒํƒœ ์—ฐ๊ฒฐ์— ๋”ฐ๋ฅธ ์œ„์ ฏ ๊ตฌ๋ถ„

 

ํ”Œ๋Ÿฌํ„ฐ ์•ฑ์„ ๊ตฌ์„ฑํ•˜๋Š” ์œ„์ ฏ์€ ์Šคํ…Œ์ดํŠธ๋ฆฌ์Šค(stateless)์™€ ์Šคํ…Œ์ดํŠธํ’€(statefull) ๋‘ ๊ฐ€์ง€๋กœ ๊ตฌ๋ถ„๋œ๋‹ค.

 

๋‚ด์šฉ์„ ๊ฐฑ์‹ ํ•  ํ•„์š”๊ฐ€ ์—†๋Š” ์œ„์ ฏ์€ ํ™”๋ฉด์— ๋ณด์ด๊ธฐ ์ „์— ๋ชจ๋“  ๋กœ๋”ฉ์„ ๋๋‚ธ๋‹ค.

์ƒํƒœ๋ฅผ ์—ฐ๊ฒฐํ•  ํ•„์š”๊ฐ€ ์—†๋Š” ์œ„์ ฏ์„ ์Šคํ…Œ์ดํŠธ๋ฆฌ์Šค ์œ„์ ฏ์ด๋ผ๊ณ  ํ•˜๋ฉฐ StatelessWidget ํด๋ž˜์Šค๋ฅผ ์ƒ์† ๋ฐ›์•„์„œ ๋งŒ๋“ ๋‹ค. 

 

๋ฐ˜๋ฉด์— ๋‚ด์šฉ์„ ๊ฐฑ์‹ ํ•ด์•ผ ํ•  ๋•Œ๋„ ์žˆ๋‹ค.

์•ฑ์ด ์œ„์ ฏ์˜ ์ƒํƒœ๋ฅผ ๊ฐ์‹œํ•˜๋‹ค๊ฐ€ ์œ„์ ฏ์ด ํŠน์ • ์ƒํƒœ๊ฐ€ ๋˜๋ฉด ์•Œ๋งž์€ ์ฒ˜๋ฆฌ๋ฅผ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•œ๋‹ค. 

์ด์ฒ˜๋Ÿผ ์ƒํƒœ๊ฐ€ ์—ฐ๊ฒฐ๋œ ๋™์ ์ธ ์œ„์ ฏ์„ ์Šคํ…Œ์ดํŠธํ’€ ์œ„์ ฏ์ด๋ผ๊ณ  ํ•˜๋ฉฐ StatefullWidget ํด๋ž˜์Šค๋ฅผ ์ƒ์† ๋ฐ›์•„์„œ ๋งŒ๋“ ๋‹ค. 

 

 

 

 

 

๋ฐ๋ชจ ์•ฑ ์ˆ˜์ •ํ•˜๊ธฐ 

์•ˆ๋“œ๋กœ์ด๋“œ ์ŠคํŠœ๋””์˜ค๊ฐ€ ๋งŒ๋“ค์–ด์ค€ ํ”Œ๋Ÿฌํ„ฐ ํ”„๋กœ์ ํŠธ์˜ ๋ฐ๋ชจ ์•ฑ์„ ๋ณ€๊ฒฝํ•œ๋‹ค. 

 

๋งˆ์ง€๋ง‰ ์ค„ home : Text('HelloFlutter'), ๋งŒ ์ˆ˜์ •์„ ํ•ด์ค€๋‹ค. 

 

์‹คํ–‰ ๊ฒฐ๊ณผ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค. 

 

๊ธฐ๋ณธ์ ์ธ ํ™”๋ฉด ๊ตฌ์กฐ์—์„œ ๋ฒ—์–ด๋‚˜๋ฉด ๊ธฐ๋ณธ ํ…Œ๋งˆ๊ฐ€ ์ ์šฉ๋˜์ง€ ์•Š๊ณ 

์œ„์™€ ๊ฐ™์ด ํ…์ŠคํŠธ์— ๋…ธ๋ž€์ƒ‰ ๋ฐ‘์ค„์ด ์ƒ๊ธด๋‹ค. 

 

 

์ด๋ฒˆ์—๋Š” ํ…์ŠคํŠธ๋ฅผ ํ™”๋ฉด ํ•œ๊ฐ€์šด๋ฐ์— ๋†“์•„๋ณด๋ ค๊ณ  ํ•œ๋‹ค. 

 

home : Center(
        child : Text('Hello\nFlutter', textAlign: TextAlign.center),
      ));

 

์œ„์˜ ์ฝ”๋“œ์™€ ๊ฐ™์ด ์•„๊นŒ ๊ทธ ๋ถ€๋ถ„์„ ๋‹ค์‹œ ์ˆ˜์ •ํ•ด์ฃผ๋ฉด 

Center()ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๊ณ  child ์˜ต์…˜์— Text()ํ•จ์ˆ˜๋ฅผ ๋„ฃ์—ˆ๋‹ค. 

 

child ์˜ต์…˜์€ ์ž์‹  ์•„๋ž˜ ์–ด๋–ค ์œ„์ ฏ์„ ๋„ฃ๊ฒ ๋‹ค๋Š” ์˜๋ฏธ์ด๋‹ค. 

ํ•˜๋‚˜๋งŒ ๋„ฃ์„ ๋•Œ๋Š” child, ์—ฌ๋Ÿฌ ์œ„์ ฏ์„ ๋„ฃ์„ ๋•Œ๋Š” children ์˜ต์…˜์„ ์‚ฌ์šฉํ•œ๋‹ค. 

 

์‹คํ–‰ ํ™”๋ฉด์€ ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

 

 

 

์ด๋ฒˆ์—๋Š” ํ•˜์–€ ๋ฐฐ๊ฒฝํ™”๋ฉด๊ณผ ๊ธ€์ž ์ƒ‰์„ ๋ณ€๊ฒฝํ•˜๋ ค๊ณ  ํ•œ๋‹ค. 

 

ํ”Œ๋Ÿฌํ„ฐ์—์„œ ๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉํ•˜๋Š” ์œ„์ ฏ ์ค‘ ํ•˜๋‚˜์ธ ํŠน์ • ๊ณต๊ฐ„์„ ์ฑ…์ž„์ง€๋Š” Container๋ฅผ ๋„ฃ๊ณ 

Container์— color๋ฅผ ๋„ฃ์œผ๋ฉด ํ•˜์–€์ƒ‰ ๋ฐฐ๊ฒฝ์œผ๋กœ ๋ฐ”๋€๋‹ค. 

 

Text ์•ˆ์— style ์˜ต์…˜์„ ์ถ”๊ฐ€ํ•˜์—ฌ color์™€ fontSize๋ฅผ ๋ณ€๊ฒฝํ•œ๋‹ค. 

 

home : Container(
        color : Colors.white,
        child : Center(
          child : Text(
              'Hello\nFlutter',
              textAlign: TextAlign.center,
              style : TextStyle(color : Colors.blue, fontSize: 20),
          ),
      )
    )
    );

 

 

์‹คํ–‰ ๊ฒฐ๊ณผ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค. 

 

 

 

 

์ด๋ฒˆ์—๋Š” ์•ฑ์— ์Šค์œ„์น˜๋ฅผ ๋‹ฌ๊ณ  ํ™”๋ฉด์„ ๊ฐฑ์‹ ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ์•„๋ณด๋„๋ก ํ•  ๊ฒƒ์ด๋‹ค. 

๊ทธ๋ฆฌ๊ณ  ๋จธํ‹ฐ๋ฆฌ์–ผ ๋””์ž์ธ์„ ์ ์šฉํ•˜๋ ค๊ณ  ํ•˜๋Š”๋ฐ, ๋จธํ‹ฐ๋ฆฌ์–ผ ๋””์ž์ธ์„ ์ ์šฉํ•˜๋ ค๋ฉด Scaffold ํด๋ž˜์Šค๋ฅผ ์ด์šฉํ•œ๋‹ค.

 

๋จธํ‹ฐ๋ฆฌ์–ผ ๋””์ž์ธ์„ ์ ์šฉํ•˜๊ธฐ ์œ„ํ•ด ์•„๋ž˜์™€ ๊ฐ™์ด MyApp ํด๋ž˜์Šค๋ฅผ ์ˆ˜์ •ํ•œ๋‹ค.

 

class MyApp extends StatelessWidget {
  const MyApp({super.key});
  
  @override
  Widget build(BuildContext context) {
    var switchValue = false;
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
        visualDensity: VisualDensity.adaptivePlatformDensity,
      ),
      darkTheme: ThemeData.light(),
      home : Scaffold(
        body: Center(
          child: Switch(
            value: switchValue,
            onChanged: (value) {
              switchValue = value;
            }),
          ),
        ));
  }
}

 

 

 

์‹คํ–‰ ๊ฒฐ๊ณผ๋Š” ์•„๋ž˜์™€ ๊ฐ™์ด ์Šค์œ„์น˜๊ฐ€ ์•ฑ์˜ ํ™”๋ฉด์— ๋‚˜ํƒ€๋‚œ ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

 

 

 

ํ•˜์ง€๋งŒ, ํ˜„์žฌ ์ƒํƒœ๋กœ๋Š” ์Šค์œ„์น˜๋ฅผ ์•„๋ฌด๋ฆฌ ๋ˆŒ๋Ÿฌ๋„ ํ™”๋ฉด์— ๋ณ€ํ™”๊ฐ€ ์—†๋‹ค. 

 

์Šคํ…Œ์ดํŠธ๋ฆฌ์Šค ์œ„์ ฏ์„ ์Šคํ…Œ์ดํŠธํ’€ ์œ„์ ฏ์œผ๋กœ ๋ฐ”๊พผ๋‹ค.

void main() {
  runApp(MyApp());
}

class MyApp extends StatefulWidget {
  @override
  State<StatefulWidget> createState() {
    return _MyApp();
  }
}

class _MyApp extends State<MyApp> {
  var switchValue = false;
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
        visualDensity: VisualDensity.adaptivePlatformDensity,
      ),
      darkTheme: ThemeData.light(),
      home : Scaffold(
        body: Center(
          child: Switch(
            value: switchValue,
            onChanged: (value) {
              setState(() {
                print(value);
                switchValue = value;
              });
            }),
          ),
        ));
  }
}

 

 

 

์ด์ œ ์Šค์œ„์น˜๋ฅผ ๋ˆ„๋ฅด๋ฉด ์•„๋ž˜์™€ ๊ฐ™์ด ๋ฐ”๋€ ๊ฒƒ์ด ํ™”๋ฉด์— ๋‚˜ํƒ€๋‚  ๊ฒƒ์ด๋‹ค.

 

 

 

 

๋ฒ„ํŠผ์„ ์ข€ ๋” ์ƒ‰๋‹ค๋ฅด๊ฒŒ ๋ณ€๊ฒฝํ•ด๋ณด๋ ค๊ณ  ํ•œ๋‹ค.

ํด๋ฆญ ์—ฌ๋ถ€๋กœ 'Hello'์™€ 'Flutter'๋ฅผ ๋ฒˆ๊ฐˆ์•„๊ฐ€๋ฉด์„œ ํ™”๋ฉด์— ๋‚˜ํƒ€๋‚˜๋„๋ก

์กฐ๊ฑด๋ฌธ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•œ๋‹ค.

 

Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
        visualDensity: VisualDensity.adaptivePlatformDensity,
      ),
      darkTheme: ThemeData.light(),
      home : Scaffold(
        body: Center(
          child: ElevatedButton(
            child: Text('$test'),
            onPressed: () {
              if (test == 'Hello') {
                setState(() {
                  test = 'Flutter';
                });
              } else {
                setState(() {
                  test = 'Hello';
                });
              }
            })),
        ));
  }
}

 

728x90