[Flutter] Key

zinnnn37Β·2024λ…„ 6μ›” 14일
0

🎯 Flutter

λͺ©λ‘ 보기
4/8

πŸ—οΈ Keyλž€?

πŸ“ Widget, Element, SemanticsNode의 μ‹λ³„μžμ΄λ‹€
πŸ“ λ™μΌν•œ μƒνƒœμ˜ λ™μΌν•œ μœ„μ ―μœΌλ‘œ κ΅¬μ„±λœ μœ„μ…‹μ„ μž¬κ΅¬μ„±ν•˜κ±°λ‚˜ μΆ”κ°€/μ‚­μ œν•˜λŠ” 경우 μ‚¬μš©λœλ‹€

🌱 Stateless Widget Code

...

class KeyTest extends StatefulWidget {
  const KeyTest({super.key});

  
  State<KeyTest> createState() => _KeyTestState();
}

class _KeyTestState extends State<KeyTest> {
  List<Widget> tiles = [
    StatelessColorfulTile(),
    StatelessColorfulTile(),
  ];

  
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('Key Test'),
      ),
      body: Row(children: tiles),
      floatingActionButton: FloatingActionButton(
        onPressed: () {
          setState(() {
            tiles.insert(1, tiles.removeAt(0));
          });
        },
        child: const Icon(Icons.sentiment_very_satisfied),
      ),
    );
  }
}

class StatelessColorfulTile extends StatelessWidget {
  final Color myColor = UniqueColorGenerator.getColor();
  StatelessColorfulTile({super.key});

  
  Widget build(BuildContext context) {
    return Container(
      color: myColor,
      child: const Padding(padding: EdgeInsets.all(70.0)),
    );
  }
}

...

🌱 μ‹€ν–‰ κ²°κ³Ό

🌱 Stateful Widget Code

...

class KeyTest extends StatefulWidget {
  const KeyTest({super.key});

  
  State<KeyTest> createState() => _KeyTestState();
}

class _KeyTestState extends State<KeyTest> {
  List<Widget> tiles = [
    const StatefulColorfulTile(),
    const StatefulColorfulTile(),
  ];

  
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('Key Test'),
      ),
      body: Row(children: tiles),
      floatingActionButton: FloatingActionButton(
        onPressed: () {
          setState(() {
            tiles.insert(1, tiles.removeAt(0));
          });
        },
        child: const Icon(Icons.sentiment_very_satisfied),
      ),
    );
  }
}

class StatefulColorfulTile extends StatefulWidget {
  const StatefulColorfulTile({super.key});

  
  State<StatefulColorfulTile> createState() => _StatefulColorfulTileState();
}

class _StatefulColorfulTileState extends State<StatefulColorfulTile> {
  final Color myColor = UniqueColorGenerator.getColor();

  
  Widget build(BuildContext context) {
    return Container(
      color: myColor,
      child: const Padding(padding: EdgeInsets.all(70.0)),
    );
  }
}

...

🌱 μ‹€ν–‰ κ²°κ³Ό

Stateful Class둜 λ°”κΎΈλŠ” 경우 색상 λ³€ν™˜μ΄ μ œλŒ€λ‘œ 이루어지지 μ•ŠμŒμ„ μ•Œ 수 μžˆλ‹€
(widget tree μ°Έμ‘°)

🌱 Stateful Widget Code μˆ˜μ •

...

class KeyTest extends StatefulWidget {
  const KeyTest({super.key});

  
  State<KeyTest> createState() => _KeyTestState();
}

class _KeyTestState extends State<KeyTest> {
  List<Widget> tiles = [
	// Key μ‚½μž…
    StatefulColorfulTile(key: UniqueKey()),
    StatefulColorfulTile(key: UniqueKey()),
  ];

  
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('Key Test'),
      ),
      body: Row(children: tiles),
      floatingActionButton: FloatingActionButton(
        onPressed: () {
          setState(() {
            tiles.insert(1, tiles.removeAt(0));
          });
        },
        child: const Icon(Icons.sentiment_very_satisfied),
      ),
    );
  }
}

class StatefulColorfulTile extends StatefulWidget {
  // μƒμ„±μž λ§€κ°œλ³€μˆ˜λ‘œ key λ°›κΈ°
  const StatefulColorfulTile({required Key key}) : super(key: key);

  
  State<StatefulColorfulTile> createState() => _StatefulColorfulTileState();
}

class _StatefulColorfulTileState extends State<StatefulColorfulTile> {
  final Color myColor = UniqueColorGenerator.getColor();

  
  Widget build(BuildContext context) {
    return Container(
      color: myColor,
      child: const Padding(padding: EdgeInsets.all(70.0)),
    );
  }
}

...

🌱 μ‹€ν–‰ κ²°κ³Ό


πŸ“‘ Reference

[Flutter] Key Class

profile
πŸ˜Žλ…Έμ…˜ 상주 쀑,,😎

0개의 λŒ“κΈ€