λšλ”±κ°œλ°œ πŸ”¨

[슀파λ₯΄νƒ€μ½”λ”©ν΄λŸ½] ν”ŒλŸ¬ν„°(Flutter)둜 μ‹œμž‘ν•˜λŠ” μ•±κ°œλ°œ μ’…ν•©λ°˜ - 2μ£Όμ°¨ κ°œλ°œμΌμ§€ β‘  λ³Έλ¬Έ

개발/🎯 Flutter

[슀파λ₯΄νƒ€μ½”λ”©ν΄λŸ½] ν”ŒλŸ¬ν„°(Flutter)둜 μ‹œμž‘ν•˜λŠ” μ•±κ°œλ°œ μ’…ν•©λ°˜ - 2μ£Όμ°¨ κ°œλ°œμΌμ§€ β‘ 

λšλ”±κ°œλ°œμž πŸ”§ 2023. 11. 12. 22:02
λ°˜μ‘ν˜•

1. Flutter Widget μ΄ν•΄ν•˜κΈ°

1) StatelessWidget

ν™”λ©΄ λ‚΄ λ‚΄μš©μ΄ λ³€ν•˜μ§€ μ•ŠλŠ” μœ„μ ―(μƒˆλ‘œκ³ μΉ¨ ν•  ν•„μš”κ°€ μ—†λ‹€)
class MyApp extends StatelessWidget { // statelessWidget 상속
  const MyApp({Key? key}) : super(key: key); // μƒμ„±μž

  @override
  Widget build(BuildContext context) { // build ν•¨μˆ˜ : 화면에 보여쀄 μžμ‹ μœ„μ ― λ°˜ν™˜
    return MaterialApp(
      debugShowCheckedModeBanner: false,
      home: FirstPage(),
    );
  }
}

* 화면에 λ³΄μ΄λŠ” 첫 번째 μœ„μ ―μ€ MaterialApp λ˜λŠ” CupertinoApp μœ„μ ―μœΌλ‘œ μ‹œμž‘

 

2) StatefulWidget

ν™”λ©΄ λ‚΄ λ‚΄μš©μ΄ λ³€ν•˜λŠ” μœ„μ ―(μƒˆλ‘œκ³ μΉ¨ ν•  ν•„μš”κ°€ μžˆλ‹€)
class MyApp extends StatefulWidget {
  // μƒμ„±μž
  const MyApp({Key? key}) : super(key: key);

  @override
  State<MyApp> createState() => _MyAppState();
}

// MyApp의 μƒνƒœ(State)λ₯Ό λ‚˜νƒ€λ‚΄λŠ” 클래슀
class _MyAppState extends State<MyApp> {
  @override
  Widget build(BuildContext context) { // build ν•¨μˆ˜
    print("build 호좜");
  }
}

 

3) Navigation

Flutterμ—μ„œλŠ” 각 화면을 Route라고 λΆ€λ₯΄λ©°, 화면을 이동할 λ•Œ navigatorλ₯Ό μ‚¬μš©ν•œλ‹€.
// λ‹€μŒ νŽ˜μ΄μ§€λ‘œ 이동
Navigator.push(
  context,
  MaterialPageRoute(builder: (context) => SecondPage()), 
);

// ν˜„μž¬ ν™”λ©΄ μ’…λ£Œ
Navigator.pop(context);

* 화면이 λ§Žμ•„μ§€λŠ” 경우, named route 방식을 μ‚¬μš©ν•˜κΈ°λ„ ν•œλ‹€.

2. ν”„λ‘œμ νŠΈ μ€€λΉ„

    prefer_const_constructors: false
    prefer_const_literals_to_create_immutables: false

-> 화면에 λΆˆν•„μš”ν•œ λ‚΄μš© ν‘œμ‹œν•˜μ§€ μ•ŠκΈ° (analysis_options.yaml)

3. λ‹Ήκ·Όλ§ˆμΌ“ ν™”λ©΄ λ§Œλ“€κΈ°

class MyApp extends StatelessWidget {
  const MyApp({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return MaterialApp( // 앱을 μ‹œμž‘ν•  λ•Œ, MeterialApp으둜 μ•± μ‹œμž‘
      debugShowCheckedModeBanner: false,
      home: HomePage(), // homeμ΄λΌλŠ” μ΄λ¦„μ˜ λ§€κ°œλ³€μˆ˜μ— 첫 번째 μœ„μ ―μ„ λ§Œλ“€μ–΄ 전달
    );
  }
}

 

λ ˆμ΄μ•„μ›ƒ λ‚˜λˆ„κΈ°

Row와 Column을 μ΄μš©ν•΄μ„œ μ„Ήμ…˜ λ³„λ‘œ λ‚˜λˆ„μ–΄ 큰 ν‹€λΆ€ν„° μž‘μ—…

(Row, Column : μ—¬λŸ¬ μœ„μ ―μ„ κ°€λ‘œ, μ„Έλ‘œλ‘œ λ°°μΉ˜ν•  수 μžˆλ„λ‘ λ¬Άμ–΄μ£ΌλŠ” μœ„μ ―)

crossAxisAlignment μ„€μ •ν•˜κΈ°

MainAxisAlignment, CrossAxisAlignmentλ₯Ό μ„€μ •ν•΄ Row, Column λ‚΄ μš”μ†Œλ“€μ„ μ •λ ¬

λ°˜μ‘ν˜•