728x90
๋ฐ˜์‘ํ˜•
728x90
๋ฐ˜์‘ํ˜•

Offstage class

offstage class๋Š” ๋ง ๊ทธ๋Œ€๋กœ stage์—์„œ off(๋ฒ—์–ด๋‚œ๋‹ค)ํ•œ๋‹ค๋Š” ๊ฒƒ์œผ๋กœ ์ดํ•ดํ–ˆ๋‹ค.

offstage class๋Š” navigator์™€ ๋น„์Šทํ•˜๊ฒŒ ํŽ˜์ด์ง€๊ฐ€ ๋ฐ”๋€Œ๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ธ๋‹ค.
ํ•˜์ง€๋งŒ, ์ƒˆ๋กœ์šด ํŽ˜์ด์ง€๋ฅผ ๋งŒ๋“ค์ง€ ์•Š์•„๋„ ๋œ๋‹ค๋Š” ํŠน์ง•์ด์ž ์žฅ์ ์ด ์žˆ๋‹ค.

๋˜ ๋‹ค๋ฅธ ํŠน์ง•์€ ์šฐ๋ฆฌ ๋ˆˆ์—๋Š” ๋ณด์ด์ง€ ์•Š์ง€๋งŒ offstage ์ƒํƒœ์—์„œ๋„ ๊ณ„์† ์‹คํ–‰๋˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์šฐ๋ฆฌ ๋ˆˆ์— ๋ณด์ด๋Š๋ƒ ์•ˆ๋ณด์ด๋Š๋ƒ์˜ ์—ฌ๋ถ€์— ๊ด€๊ณ„ ์—†์ด ๋ฐฐํ„ฐ๋ฆฌ๊ฐ€ ์†Œ์š”๋œ๋‹ค.

์ด์ œ offstage์— ๋Œ€ํ•ด ๋” ์ž์„ธํ•˜๊ฒŒ ์ดํ•ดํ•˜๊ธฐ ์œ„ํ•ด ์˜ˆ์‹œ ์ฝ”๋“œ๋ฅผ ๊ฐ€์ ธ์™”๋‹ค.
์ „์ฒด ์ฝ”๋“œ๋Š” ์•„๋ž˜ ๋งํฌ๋กœ ๋‘์—ˆ์œผ๋‹ˆ ์ „์ฒด ์ฝ”๋“œ๊ฐ€ ๊ถ๊ธˆํ•˜๋‹ค๋ฉด ๋“ค์–ด๊ฐ€๊ธธ ๋ฐ”๋ž€๋‹ค.



  1. offstage๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ์ „์— ๋จผ์ € true๋กœ ๊ฐ’์„ ์„ค์ •ํ•ด์ค€๋‹ค.
bool _offstage = true;
  1. offstage๊ฐ€ true์ด๋ฉด ๋ฌผ๋ฆฌ์  ๊ณต๊ฐ„์ด ๋ˆˆ์— ๋ณด์ด์ง€ ์•Š๋Š”๋‹ค.
    ๋ฐ˜๋Œ€๋กœ, offstage๊ฐ€ false์ด๋ฉด ๋ฌผ๋ฆฌ์  ๊ณต๊ฐ„์ด ๋ˆˆ์— ๋ณด์ธ๋‹ค.
@override
  Widget build(BuildContext context) {
    return Column(
      mainAxisAlignment: MainAxisAlignment.center,
      children: <Widget>[
        Offstage(
          offstage: _offstage,
          child: FlutterLogo(
            key: _key,
            size: 150.0,
          ),
        ),
        Text('Flutter logo is offstage: $_offstage'),
        ElevatedButton(
          child: const Text('Toggle Offstage Value'),
          onPressed: () {
            setState(() {
              _offstage = !_offstage;//false๋กœ ์ดˆ๊ธฐ ์„ค์ •ํ•œ ๊ฐ’์ด ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅผ ๋•Œ๋งˆ๋‹ค ๊ฐ’์ด ๋ฐ”๋€๋‹ค.
            });
          },
        ),
      ],
    );
  }

<์ดˆ๊ธฐํ™”๋ฉด>

<๋ฒ„ํŠผ ๋ˆ„๋ฅธ ํ›„ ํ™”๋ฉด>

์ „์ฒด ์ฝ”๋“œ
https://dartpad.dev/?id=2bad6eb52a25efd3df702370db842253

728x90
๋ฐ˜์‘ํ˜•

'๐Ÿ’ง flutter' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[Flutter] SizedOverflowBox class ์ •๋ฆฌ  (0) 2022.07.06
[Flutter] OverflowBox class ์ •๋ฆฌ  (0) 2022.07.06
[Flutter] LimitedBox class ์ •๋ฆฌ  (0) 2022.07.06
[Flutter] IntrinsicWidth class ์ •๋ฆฌ  (0) 2022.07.06
[Flutter] IntrinsicHeight class ์ •๋ฆฌ  (0) 2022.07.06
728x90
๋ฐ˜์‘ํ˜•

LimitedBox class

์ด ์œ„์ ฏ์€ child์— ๋Œ€ํ•œ ์ œํ•œ์ด ์—†๋Š” ๊ฒฝ์šฐ์— ๋ฐ•์Šค๋ฅผ ์ œํ•œํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.
๋Œ€๋ถ€๋ถ„ ์ƒ์œ„ ์š”์†Œ์—์„œ ์ •์˜๋œ ์ œํ•œ์— ๋”ฐ๋ผ ํฌ๊ธฐ๊ฐ€ ์ •ํ•ด์ง„๋‹ค. ํ•˜์ง€๋งŒ ListView, Column, Row์™€ ๊ฐ™์€ ๊ฒฝ์šฐ, ํ•˜์œ„์š”์†Œ ํฌ๊ธฐ์— ์ œํ•œ์„ ๋‘์ง€ ์•Š๋Š”๋‹ค.

์ด์ฒ˜๋Ÿผ ์ƒ์œ„ ์š”์†Œ์˜ ์ œํ•œ์ด ์กด์žฌํ•˜์ง€ ์•Š์„ ๋•Œ, ์ƒ์œ„ ์š”์†Œ ์ œํ•œ์— ์˜์กดํ•˜๋Š” ์œ„์ ฏ์—๋Š” ์–ด๋–ป๊ฒŒ ๊ธฐ๋ณธ๊ฐ’์„ ์ค„ ์ˆ˜ ์žˆ์„๊นŒ?

์ด๋Ÿฐ ๊ฒฝ์šฐ์— LimitedBox๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค!
LimitedBox๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด maxHeight์™€ maxWidth๊ฐ€ ์ œ๊ณต๋œ๋‹ค. ์ด๋Š” child์—๊ฒŒ ๋ฌดํ•œํ•œ ์ƒํ™ฉ์—์„œ ์ž์—ฐ์Šค๋Ÿฌ์šด ํฌ๊ธฐ๋ฅผ ์ œ๊ณตํ•˜๋Š” ํšจ๊ณผ๊ฐ€ ์žˆ๋‹ค.

๊ฒฝ์šฐ๋ฅผ ๋‚˜๋ˆ  ์ •๋ฆฌํ•ด๋ณด๋ฉด,

๋งŒ์•ฝ ์œ„์ ฏ์˜ ์ตœ๋Œ€ ๋„ˆ๋น„๊ฐ€ ์ œํ•œ๋˜์ง€ ์•Š์•˜๋‹ค๋ฉด ์ด ์œ„์ ฏ์˜ child์˜ ๋„ˆ๋น„๋Š” maxWidth์— ๋”ฐ๋ผ ์ œํ•œ๋œ๋‹ค.

๊ฐ™์€ ๋…ผ๋ฆฌ๋กœ, ๋งŒ์•ฝ ์œ„์ ฏ์˜ ์ตœ๋Œ€ ๋†’์ด๊ฐ€ ์ œํ•œ๋˜์ง€ ์•Š์•˜๋‹ค๋ฉด ์ด ์œ„์ ฏ์˜ child์˜ ๋†’์ด ๋˜ํ•œ maxHeight์— ์ œํ•œ๋œ๋‹ค.

728x90
๋ฐ˜์‘ํ˜•
728x90
๋ฐ˜์‘ํ˜•

IntrinsicWidth class

๋ฐ”๋กœ ์ด์ „์— IntrinsicHeight class์— ๋Œ€ํ•ด ๋‹ค๋ฃจ์—ˆ๋‹ค.
height๊ฐ€ ์žˆ์œผ๋‹ˆ width๋„ ์กด์žฌํ•œ๋‹ค.

IntrinsicHeight class์™€ ๊ฑฐ์˜ ๋น„์Šทํ•œ ๋‚ด์šฉ์ด๋‹ค.
์œ„ ์„ค๋ช…์—์„œ height๋ฅผ width๋กœ ๋ฐ”๊ฟ”์„œ ์ดํ•ดํ•˜๋ฉด ๋œ๋‹ค.


์ด ์œ„์ ฏ์€ ๋„ˆ๋น„๊ฐ€ ์ œํ•œ๋˜์ง€ ์•Š๊ณ  ๋ฌดํ•œ ํ™•์žฅ์„ ์‹œ๋„ํ•˜๋Š” child๋ฅผ ํ•„์š”๋กœ ํ•  ๋•Œ ์œ ์šฉํ•˜๋‹ค.

์ด ์œ„์ ฏ์ด child์—๊ฒŒ ์ „๋‹ฌํ•˜๋Š” constraints๋Š” ๋ถ€๋ชจ์˜ constraints๋ฅผ ์ง€ํ‚ค๊ธฐ ๋•Œ๋ฌธ์— ๋งŒ์•ฝ constraints๊ฐ€ child์˜ ์ตœ๋Œ€ ๊ณ ์œ  ๋†’์ด๋ฅผ ํฌํ•จํ•  ๋งŒํผ ์ถฉ๋ถ„ํžˆ ํฌ์ง€ ์•Š์œผ๋ฉด ๋น„๊ต์  ๋‚ฎ์€ ๋†’์ด๋ฅผ ๊ฐ€์ง€๊ฒŒ ๋œ๋‹ค. ๋ฐ˜๋Œ€๋กœ, ์ตœ์†Œ ๋†’์ด constraints๊ฐ€ child์˜ ์ตœ๋Œ€ ๊ณ ์œ  ๋†’์ด๋ณด๋‹ค ํฌ๋ฉด ๋น„๊ต์  ๋” ๋งŽ์€ ๋†’์ด๊ฐ€ ์ง€์ •๋œ๋‹ค.

  • ๋ถ€๋ชจ์˜ constraints < child์˜ ๊ณ ์œ  ๋„ˆ๋น„
    ๋‚ฎ์€ ๋„ˆ๋น„๋ฅผ ๊ฐ€์ง€๊ฒŒ ๋œ๋‹ค.
  • ๋ถ€๋ชจ์˜ constraints > child์˜ ๊ณ ์œ  ๋„ˆ๋น„
    ๋†’์€ ๋„ˆ๋น„๋ฅผ ๊ฐ€์ง€๊ฒŒ ๋œ๋‹ค.

์ฆ‰, child๋Š” ๋ถ€๋ชจ์˜ constraints๋ฅผ ๋”ฐ๋ฅด๋Š”๋ฐ, ์ด ๋•Œ ๋ถ€๋ชจ์˜ constraints์™€ child์˜ ๊ณ ์œ  ๋„ˆ๋น„ ์‚ฌ์ด์˜ ๊ด€๊ณ„์— ๋Œ€ํ•œ ๊ฒƒ์ด๋‹ค.

์ด class ๋˜ํ•œ ๊ฐ€๋Šฅํ•œ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์„ ์ถ”์ฒœํ•œ๋‹ค.

<์‚ฌ์šฉ ํ›„>

(์‚ฌ์ง„์ถœ์ฒ˜: https://bsscco.github.io/posts/flutter-layout-widgets/)

728x90
๋ฐ˜์‘ํ˜•

'๐Ÿ’ง flutter' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[Flutter] Offstage class ์ •๋ฆฌ  (0) 2022.07.06
[Flutter] LimitedBox class ์ •๋ฆฌ  (0) 2022.07.06
[Flutter] IntrinsicHeight class ์ •๋ฆฌ  (0) 2022.07.06
[Flutter] FractionallySizedBox class ์ •๋ฆฌ  (0) 2022.07.06
[Flutter] FittedBox Class ์ •๋ฆฌ  (0) 2022.07.06
728x90
๋ฐ˜์‘ํ˜•
728x90

 

IntrinsicHeight class

์ด๋ฆ„์„ ๋ณด์ž๋งˆ์ž Intrinsic์ด ๋ฌด์Šจ ์˜๋ฏธ์ง€? ํ•˜๋Š” ์งˆ๋ฌธ์ด ์ƒ๊ฒผ๋‹ค.

์ฐพ์•„๋ณด๋‹ˆ Intrinsic๋Š” ๊ณ ์œ ํ•œ, ๋ณธ์งˆ์ ์ธ ์ด๋ผ๋Š” ๋œป์ด๋‹ค.

๋œป ๊ทธ๋Œ€๋กœ IntrinsicHeight๋Š” child์˜ ๊ณ ์œ  ๋†’์ด์— ๋งž์ถฐ child์˜ ํฌ๊ธฐ๋ฅผ ์กฐ์ •ํ•˜๋Š” ์œ„์ ฏ์ด๋‹ค.

์ด ์œ„์ ฏ์€ ๋†’์ด๊ฐ€ ์ œํ•œ๋˜์ง€ ์•Š๊ณ  ๋ฌดํ•œ ํ™•์žฅ์„ ์‹œ๋„ํ•˜๋Š” child๋ฅผ ํ•„์š”๋กœ ํ•  ๋•Œ ์œ ์šฉํ•˜๋‹ค.

์ด ์œ„์ ฏ์ด child์—๊ฒŒ ์ „๋‹ฌํ•˜๋Š” constraints๋Š” ๋ถ€๋ชจ์˜ constraints๋ฅผ ์ง€ํ‚ค๊ธฐ ๋•Œ๋ฌธ์— ๋งŒ์•ฝ constraints๊ฐ€ child์˜ ์ตœ๋Œ€ ๊ณ ์œ  ๋†’์ด๋ฅผ ํฌํ•จํ•  ๋งŒํผ ์ถฉ๋ถ„ํžˆ ํฌ์ง€ ์•Š์œผ๋ฉด ๋น„๊ต์  ๋‚ฎ์€ ๋†’์ด๋ฅผ ๊ฐ€์ง€๊ฒŒ ๋œ๋‹ค. ๋ฐ˜๋Œ€๋กœ, ์ตœ์†Œ ๋†’์ด constraints๊ฐ€ child์˜ ์ตœ๋Œ€ ๊ณ ์œ  ๋†’์ด๋ณด๋‹ค ํฌ๋ฉด ๋น„๊ต์  ๋” ๋งŽ์€ ๋†’์ด๊ฐ€ ์ง€์ •๋œ๋‹ค.

  • ๋ถ€๋ชจ์˜ constraints < child์˜ ๊ณ ์œ  ๋†’์ด
    ๋‚ฎ์€ ๋†’์ด๋ฅผ ๊ฐ€์ง€๊ฒŒ ๋œ๋‹ค.
  • ๋ถ€๋ชจ์˜ constraints > child์˜ ๊ณ ์œ  ๋†’์ด
    ๋†’์€ ๋†’์ด๋ฅผ ๊ฐ€์ง€๊ฒŒ ๋œ๋‹ค.

์ฆ‰, child๋Š” ๋ถ€๋ชจ์˜ constraints๋ฅผ ๋”ฐ๋ฅด๋Š”๋ฐ, constraints๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ๋‹ค. ์ด ๋•Œ ๋ถ€๋ชจ์˜ constraints์™€ child์˜ ๊ณ ์œ  ๋†’์ด ์‚ฌ์ด์˜ ๊ด€๊ณ„์— ๋Œ€ํ•œ ๊ฒƒ์ด๋‹ค.

๊ฐ€๋Šฅํ•œ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์„ ์ถ”์ฒœํ•œ๋‹ค.

<์‚ฌ์šฉ ์ „>

<์‚ฌ์šฉ ํ›„>

 

 

728x90
๋ฐ˜์‘ํ˜•
๋ฐ˜์‘ํ˜•

 

728x90
๋ฐ˜์‘ํ˜•
728x90
๋ฐ˜์‘ํ˜•
728x90

FractionallySizedBox class

FractionallySizedBox class๋Š” ์ƒ์œ„ ๋ถ€๋ชจ์˜ ์‚ฌ์ด์ฆˆ ๋น„์œจ์— ๋งž๊ฒŒ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด๋‹ค.
์ฆ‰ ๋””์ž์ธ์˜ ํฌ๊ธฐ๊ฐ€ ์ƒ๋Œ€์ ์ด์–ด์•ผ ํ•  ๋•Œ ํฌ๊ธฐ๋ฅผ ์ƒ์œ„ ๋ถ€๋ชจ์˜ ์‚ฌ์ด์ฆˆ๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ๋น„์œจ๋กœ ํ‘œํ˜„ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

example)

  • FractionallySizedBox๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์ƒ์œ„ ๋ถ€๋ชจ์˜ ์‚ฌ์ด์ฆˆ ๋น„์œจ์„ ์ง€์ •ํ•˜์—ฌ child์˜ ํฌ๊ธฐ๋ฅผ ์ •ํ•˜๊ณ  ์žˆ๋‹ค.
  • ์ฝ”๋“œ์—์„œ 0.7์€ 70%๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค. ์ฆ‰ ์ƒ์œ„ ๋ถ€๋ชจ ์‚ฌ์ด์ฆˆ์˜ 70%๋งŒํผ child๋ฅผ ๋งŒ๋“ค๊ฒ ๋‹ค๋Š” ์˜๋ฏธ์ด๋‹ค.
  • widthFactor์ฒ˜๋Ÿผ heightFactor์„ ์‚ฌ์šฉํ•˜์—ฌ ๋†’์ด์˜ ๋น„์œจ๋„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.


์ด์ฒ˜๋Ÿผ FractionallySizedBox class๋Š” ์ƒ์œ„ ๋ถ€๋ชจ์˜ ์‚ฌ์ด์ฆˆ ๋น„์œจ๋กœ ํฌ๊ธฐ๋ฅผ ์ง€์ •ํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.

 

๋ฐ˜์‘ํ˜•

 

728x90
๋ฐ˜์‘ํ˜•

'๐Ÿ’ง flutter' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[Flutter] IntrinsicWidth class ์ •๋ฆฌ  (0) 2022.07.06
[Flutter] IntrinsicHeight class ์ •๋ฆฌ  (0) 2022.07.06
[Flutter] FittedBox Class ์ •๋ฆฌ  (0) 2022.07.06
[Flutter] CustomSingleChildLayout ์ •๋ฆฌ  (0) 2022.07.06
[Flutter] Initializer lists ์ •๋ฆฌ  (0) 2022.07.06

+ Recent posts