π Today I Learned 14νμ°¨ - Dart 컬λ μ μ μ΄ νλ¦ π
π Dart 컬λ μ μ μ΄ νλ¦
π€ μ§λ¬Έ
λ€μκ³Ό κ°μ μ½λμμ children
λ°°μ΄μ if λ¬Έμ κ²°κ³Όμ λ°λΌ Containerκ° ν¬ν¨λλ ννλ₯Ό λ³΄κ² λμμ΅λλ€:
children: [
VideoPlayer(videoPlayerController!),
if (showControls) Container(color: Colors.black.withOpacity(0.5)),
]
μ΄ ννλ μ²μ 보λ ννμΈλ°, μ΄λ»κ² λ¬Έλ²μ μΌλ‘ κ°λ₯ν κ±ΈκΉμ? if λ¬Έμ {}
μμ λμμ λλ μλλλ° λ§μ΄μ£ .
π‘ λ΅λ³
λ€, μ²μ 보μλ©΄ κ΅μ₯ν μ κΈ°νκ² λκ»΄μ§ μ μλ λ¬Έλ²μ
λλ€. κ·Έ μ½λκ° λ¬Έλ²μ μΌλ‘ κ°λ₯ν μ΄μ λ Dart μΈμ΄μμ 2.3 λ²μ λΆν° λμ
λ 컬λ μ
μ μ΄ νλ¦(Collection Control Flow) κΈ°λ₯ μ€ νλμΈ collection if
λλΆμ
λλ€.
κ²°λ‘ λΆν° λ§μλ리면, if
λ¬Έμ΄ {}
(μ€κ΄νΈ) μμ΄ μ¬μ©λ λ λ¬Έ(Statement)μ΄ μλ ννμ(Expression)μ²λΌ λμνμ¬ λ¦¬μ€νΈμ μΌλΆκ° λ μ μκΈ° λλ¬Έμ
λλ€.
π μ£Όμ λ΄μ©
1οΈβ£ λ¬Έ(Statement) vs ννμ(Expression)
μ΄ λ¬Έλ²μ μ΄ν΄νλ €λ©΄ λ¨Όμ λ κ°μ§μ μ°¨μ΄λ₯Ό μμμΌ ν©λλ€.
- λ¬Έ(Statement): νΉμ μμ
μ μννλλ‘ νλ λͺ
λ Ήμ
λλ€. κ·Έ μμ²΄κ° κ°μΌλ‘ νκ°λμ§ μμ΅λλ€. μ°λ¦¬κ° νν μλ
if (...) { ... }
,for (...) { ... }
λ±μ΄ μ¬κΈ°μ ν΄λΉν©λλ€. - ννμ(Expression): νκ°λμμ λ νλμ κ°(value)μ μμ±νλ μ½λ μ‘°κ°μ
λλ€.
1 + 2
,isLoggedIn
,Container()
λ±μ΄ λͺ¨λ ννμμ λλ€.
κΈ°μ‘΄μ if (...) { ... }
λ λ¬Έ(Statement)μ΄κΈ° λλ¬Έμ, κ°μ λ£μ΄μΌ νλ children
λ°°μ΄(List
) μμ μ§μ λ€μ΄κ° μ μμμ΅λλ€. 리μ€νΈλ κ°λ€μ λͺ¨μμ΄κΈ° λλ¬Έμ΄μ£ .
// β μ΄κ±΄ λ¬Έλ²μ μΌλ‘ λΆκ°λ₯ν©λλ€.
// 리μ€νΈ μμλ 'κ°'μ΄ μμΌ νλλ°, if "λ¬Έ"μ΄ μκΈ° λλ¬Έμ
λλ€.
children: [
VideoPlayer(videoPlayerController!),
if (showControls) { // μ€κ΄νΈκ° μλ if "λ¬Έ"
Container(color: Colors.black.withOpacity(0.5));
}
]
2οΈβ£ collection if
μ λ±μ₯ β¨
Dartλ μ΄λ° λΆνΈν¨μ ν΄μνκ³ λ μ μΈμ μΈ UI μ½λλ₯Ό μμ±ν μ μλλ‘ collection if
λ₯Ό λμ
νμ΅λλ€. μ΄λ if
λ₯Ό ννμμ²λΌ μ¬μ©νμ¬ μ‘°κ±΄μ λ°λΌ 컬λ μ
(List, Map, Set)μ μμλ₯Ό μΆκ°ν μ μκ² ν΄μ£Όλ νΉλ³ν λ¬Έλ²μ
λλ€.
// β
μ΄λ κ² μ€κ΄νΈ μμ΄ μ¬μ©νλ©΄ 'collection if' λ¬Έλ²μ΄ μ μ©λ©λλ€.
children: [
VideoPlayer(videoPlayerController!),
// 'showControls'κ° trueμ΄λ©΄, μ΄ μ리μ Container()λΌλ 'κ°'μ΄ ν¬ν¨λλ€.
// falseμ΄λ©΄, μ무κ²λ μλ κ²μ²λΌ μ·¨κΈλλ€.
if (showControls) Container(color: Colors.black.withOpacity(0.5)),
]
μ΄ μ½λλ βλ§μ½ showControls
κ° true
λΌλ©΄ μ΄ λ¦¬μ€νΈμ Container
μμ ―μ ν¬ν¨μμΌμ€β λΌλ μλ―Έλ‘ ν΄μλ©λλ€. λλΆμ μ½λκ° ν¨μ¬ κ°κ²°νκ³ μ§κ΄μ μΌλ‘ λ³ν©λλ€.
3οΈβ£ κ³Όκ±°μλ μ΄λ»κ² ꡬννμκΉ? π°οΈ
μ΄ λ¬Έλ²μ΄ μλ μμ μλ μλμ κ°μ΄ μ½λλ₯Ό μμ±ν΄μΌ νμ΅λλ€. ν¨μ¬ λ²κ±°λ‘μ£ .
λ°©λ² 1: μΌν μ°μ°μ μ¬μ©
π‘ μ‘°κ±΄μ΄ κ°λ¨ν λ μ¬μ©νλ λ°©λ²μ λλ€.
null
μ λ£μΌλ©΄ Flutterκ° λΉ κ³΅κ°μΌλ‘ μ²λ¦¬νλ κ²μ μ΄μ©νμ§λ§, κ°λ
μ±μ΄ λ¨μ΄μ§κ³ 리μ€νΈμ null
μ΄ ν¬ν¨λ μ μμ΅λλ€.
children: [
VideoPlayer(videoPlayerController!),
showControls ? Container(color: Colors.black.withOpacity(0.5)) : SizedBox.shrink(), // falseμΌ λ λΉ μμ ―μ λ£μ΄μΌ ν¨
]
λ°©λ² 2: 리μ€νΈλ₯Ό 미리 λ§λ€κ³ add
λ©μλ μ¬μ©
κ°μ₯ μΌλ°μ μΈ λ°©λ²μ΄μμ§λ§, μμ ― νΈλ¦¬ μμμ λ‘μ§μ΄ λΆλ¦¬λμ΄ μ½λκ° μ₯ν©ν΄μ§λλ€.
List<Widget> _buildChildren() {
final children = <Widget>[
VideoPlayer(videoPlayerController!),
];
if (showControls) {
children.add(Container(color: Colors.black.withOpacity(0.5)));
}
return children;
}
// ... build λ©μλ μμμ ...
Column(
children: _buildChildren(),
)
π‘ κ²°λ‘ :
collection if
λ μ΄ λͺ¨λ λ²κ±°λ‘μμ ν μ€λ‘ ν΄κ²°ν΄μ£Όλ λ§€μ° μ μ©ν κΈ°λ₯μ λλ€.collection for
λspread(...)
μ°μ°μμ ν¨κ» μ¬μ©νλ©΄ λμ± κ°λ ₯νκ³ κΉλν μ½λλ₯Ό μμ±ν μ μμ΅λλ€.
π λ§λ¬΄λ¦¬
β μ€λ λ°°μ΄ κ²
- 컬λ μ μ μ΄ νλ¦: Dart 2.3λΆν° λμ λ κ°λ ₯ν λ¬Έλ²
- collection if: 쑰건μ λ°λΌ 컬λ μ μ μμλ₯Ό λμ μΌλ‘ μΆκ°
- λ¬Έ vs ννμ: Statementμ Expressionμ μ°¨μ΄μ
- μ½λ κ°κ²°μ±: κ³Όκ±° λ°©λ² λλΉ ν¨μ¬ κ°κ²°νκ³ μ½κΈ° μ¬μ΄ μ½λ μμ± κ°λ₯
π μΆκ° νμ΅ μ£Όμ
collection for
: λ°λ³΅λ¬Έμ 컬λ μ λ΄λΆμμ μ¬μ©spread operator(...)
: 컬λ μ μ νΌμ³μ μμ μΆκ°collection if-else
: 쑰건μ λ°λΌ λ€λ₯Έ μμ μΆκ°
λκΈλ¨κΈ°κΈ°