🌗
Flutterで三項演算子じゃなくてif文とかswitch文使いたい時
How to use conditional statement like ternary operator
三項演算子使う感じでif文使おうとすると使えないかなしみ
これはOK
class MyApp extends StatelessWidget {
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
body: Center(
child: (1 == 1) ? Text('1') : Text('2'),
),
),
);
}
}
こうすると使えない
class MyApp extends StatelessWidget {
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
body: Center(
child:
if(1 == 1){
Text('1'),
}
else{
Text('2'),
}
),
),
);
}
}
何故か
三項演算子は式だけどif文はステートメントだから
値一個だけ帰ってこないと駄目なわけですね
対策
即時関数を利用する
class MyApp extends StatelessWidget {
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
body: Center(
child: (() {
if (1 == 1) {
return Text('1');
} else {
return Text('2');
}
})(),
),
),
);
}
}
これで無名関数で一つの値が帰ってくるので、if文が使える。
returnで値が帰ってきてればなんでもいいので途中で処理とかも書けますね。
class MyApp extends StatelessWidget {
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
body: Center(
child: (() {
switch (1) {
case 1:
return Text('1');
case 2:
return Text('2');
}
})(),
),
),
);
}
}
同じ理由でswitch文も使える。
ただ即時関数見づらいので名前付きで切り分ける方が多い気がしますね...
class MyApp extends StatelessWidget {
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
body: Center(
child: switchBun(),
),
),
);
}
Widget switchBun() {
switch (1) {
case 1:
return Text('1');
case 2:
return Text('2');
}
}
}
終わり
意外と即時関数を使ってif文書いてるみたいな記事がなかったので書きました。
なんでif文が使えないんだと詰まったことがあったので、同じような人に届くと良いです。
Discussion
If式実装して欲しいですねー
初心者です。三項演算子だったらエラー出ないのですね💦
「なんでif文でエラー出るんだろ・・・」というレベルでつまづいてたのでめちゃくちゃ助かりました<(_ _)>