Табы в приложении

Одним из вариантов организации меню в приложении, является организация «табов», которые могут располагаться как внизу экрана, так и вверху. Например что-то вроде:

Это изображение имеет пустой атрибут alt; его имя файла - %D0%B8%D0%B7%D0%BE%D0%B1%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D0%B5-2.png

Для начала создадим отдельную функцию отрисовки табов:

class _MainPageState extends State<MainPage> {// _ впереди класса, означает чтоб скрыть доступ из другх файлов
  final scaffoldKey = GlobalKey<ScaffoldState>();

  TabBar createTabBar()  {
    return TabBar(
      tabs: [
        Row (children: [Icon(Icons.ac_unit), SizedBox(width:5), Text("Датчики")]),
        Row (children: [Icon(Icons.adjust), SizedBox(width:5), Text("Реле")]),
        Row (children: [Icon(Icons.add_to_queue), SizedBox(width:5), Text("Свет")]),
        Row (children: [Icon(Icons.accessibility_sharp), SizedBox(width:5), Text("Комфорт")]),
      ],
      isScrollable: true,
    );
  }

isScrollable — отвечает за плавное переключение табов. Если эффект анимации не нужен — можно отключить.

Далее главный виджет:

@override
  Widget build(BuildContext context) {
    EdgeInsets a2; EdgeInsetsDirectional a;
    return DefaultTabController(
      length: 4, // количество табов
      child:Scaffold(
          appBar: AppBar(
            bottom: createTabBar(), // функция - построитель табов
            title: Text("Усадьба Мальгино"),
          ),
          body: TabBarView(
              children: [
                Text("1"),
                Text("2"),
                Text("3"),
                Text("4"),
          ]
          )
      )
    );

При отрисовке в методе TabBar можно использовать следующие настройки:

  • isScrollable = true/false = плавный скроллинг
  • padding = отступы
  • indicatorColor = цвет подсветки
  • indicatorWeight = 2.0 = толщина подчёркивания
  • indicatorPadding = EdgeInsets.zero = отступы подчёркивания
  • indicatorSize = размер чёрточки
  • labelColor = цвет текста таба
  • labelStyle = стиль текста таба
  • labelPadding = отступы между метками
  • unselectedLabelColor = цвет не выделенного таба
  • unselectedLabelStyle = стиль не выделенного таба
  • onTap = действие при выборе

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.