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

Условие if-else в методе build в Flutter

Метод build у StatelessWidget должен вернуть один виджет. Иногда экран или фрагмент зависит от условия: показать приветствие или заглушку. В Dart внутри build можно использовать if и else и в каждой ветке вернуть свой виджет - как в учебнике Dart, только результатом будет не число, а дерево интерфейса.

Пока состояние не меняется во время работы приложения, достаточно локальной или поля класса: final или const флаг, строка режима, результат проверки. После hot reload изменение константы в коде перерисует экран; интерактивное переключение разберём, когда изучим setState:

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 userLoggedIn = false; if (userLoggedIn) { return Scaffold( body: Center(child: Text('Account')), ); } else { return Scaffold( body: Center(child: Text('Sign in')), ); } } }

Ветки должны возвращать совместимые по смыслу корни - чаще оба раза Scaffold с разным body. Условие может стоять и внутри одного Scaffold, если меняется только содержимое body, но отдельные return наглядны для двух полностью разных экранов:

Widget build(BuildContext context) { const isEmpty = true; Widget body; if (isEmpty) { body = const Center(child: Text('The list is empty')); } else { body = ListView( children: const [Text('Item')], ); } return Scaffold(body: body); }

В build выберите экран так:

const showError = true; if (showError) { return const Scaffold( body: Center(child: Text('Load error')), ); } return const Scaffold( body: Center(child: Text('Data is here')), );

Переключите константу и перезапустите preview, чтобы увидеть второй вариант.

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