Создаем портфолио за 1 месяц
К концу месяца: 4 классных проекта в вашем портфолио! Стоимость: 100$. Подробности...
⊗flPmCdTr 44 of 125 menu
◀ ▶

Тернарный оператор в дереве виджетов в Flutter

Когда нужно подставить один из двух виджетов на одно место, удобен тернарный оператор условие ? виджетA : виджетB. Он работает как выражение: результат можно передать в child, положить в список children или вернуть из короткого фрагмента build. Логика та же, что у if-else в build, но запись компактнее:

import 'package:flutter/material.dart'; void main() { runApp(const MaterialApp(home: HomePage())); } class HomePage extends StatelessWidget { const HomePage({super.key}); @override Widget build(BuildContext context) { const isDark = false; return Scaffold( body: Center( child: isDark ? const Icon(Icons.nightlight_round) : const Icon(Icons.wb_sunny), ), ); } }

Обе ветки должны иметь тип Widget (или общий предок). Перед виджетами ставьте const, если все аргументы константные. Вложенный тернарный оператор для трёх и больше вариантов нечитаем - берите if-else или переменную с switch. Для различия текста достаточно сменить строку или иконку в одном Center:

Widget build(BuildContext context) { const isDone = true; return Column( mainAxisAlignment: MainAxisAlignment.center, children: [ const Text('Status'), const SizedBox(height: 8), isDone ? const Text('Done') : const Text('In progress'), ], ); }

В body выведите подпись тернарным выбором:

const premium = false; Center( child: Text(premium ? 'Premium' : 'Free plan'), )

Поменяйте premium на true и проверьте вторую подпись.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить