5 способов использовать DefaultTabController во Flutter для навигации с вкладками

DefaultTabController — это мощный виджет во Flutter, который обеспечивает простой способ реализации навигации с вкладками в вашем приложении. В этой статье мы рассмотрим пять различных методов использования DefaultTabController и создания привлекательных интерфейсов с вкладками. Итак, приступим!

Метод 1: базовая навигация с вкладками
Самый простой способ использовать DefaultTabController — обернуть его вокруг TabBar и TabBarView. Вот пример:

const Expanded(
  child: DefaultTabController(
    length: 2,
    child: Column(
      children: [
        TabBar(
          tabs: [
            Tab(text: 'Tab 1'),
            Tab(text: 'Tab 2'),
          ],
        ),
        TabBarView(
          children: [
            // Content for Tab 1
            Container(child: Text('Tab 1 Content')),
            // Content for Tab 2
            Container(child: Text('Tab 2 Content')),
          ],
        ),
      ],
    ),
  ),
)

Метод 2: динамическая длина вкладок
Вы также можете динамически устанавливать длину вкладок в зависимости от данных или состояния. Вот пример, где длина табуляции определяется списком элементов:

List<String> tabs = ['Tab 1', 'Tab 2', 'Tab 3'];
const Expanded(
  child: DefaultTabController(
    length: tabs.length,
    child: Column(
      children: [
        TabBar(
          tabs: tabs.map((tab) => Tab(text: tab)).toList(),
        ),
        TabBarView(
          children: tabs.map((tab) => Container(child: Text('$tab Content'))).toList(),
        ),
      ],
    ),
  ),
)

Метод 3: пользовательский индикатор вкладки
Вы можете настроить внешний вид индикатора вкладки, используя свойство индикатора TabBar. Вот пример:

const Expanded(
  child: DefaultTabController(
    length: 2,
    child: Column(
      children: [
        TabBar(
          indicator: BoxDecoration(
            color: Colors.red,
            borderRadius: BorderRadius.circular(10),
          ),
          tabs: [
            Tab(text: 'Tab 1'),
            Tab(text: 'Tab 2'),
          ],
        ),
        TabBarView(
          children: [
            // Content for Tab 1
            Container(child: Text('Tab 1 Content')),
            // Content for Tab 2
            Container(child: Text('Tab 2 Content')),
          ],
        ),
      ],
    ),
  ),
)

Метод 4: вложенная навигация с вкладками
Вы можете вкладывать виджеты DefaultTabController для создания сложных интерфейсов с вкладками. Вот пример:

const Expanded(
  child: DefaultTabController(
    length: 2,
    child: Column(
      children: [
        TabBar(
          tabs: [
            Tab(text: 'Tab 1'),
            Tab(text: 'Tab 2'),
          ],
        ),
        TabBarView(
          children: [
            // Content for Tab 1
            Container(
              child: DefaultTabController(
                length: 2,
                child: Column(
                  children: [
                    TabBar(
                      tabs: [
                        Tab(text: 'Subtab 1'),
                        Tab(text: 'Subtab 2'),
                      ],
                    ),
                    TabBarView(
                      children: [
                        // Content for Subtab 1
                        Container(child: Text('Subtab 1 Content')),
                        // Content for Subtab 2
                        Container(child: Text('Subtab 2 Content')),
                      ],
                    ),
                  ],
                ),
              ),
            ),
            // Content for Tab 2
            Container(child: Text('Tab 2 Content')),
          ],
        ),
      ],
    ),
  ),
)

Метод 5: управление выбором вкладок
Вы можете программно управлять выбранной вкладкой, используя свойство InitialIndex DefaultTabController. Вот пример:

const Expanded(
  child: DefaultTabController(
    length: 3,
    initialIndex: 1, // Select Tab 2 initially
    child: Column(
      children: [
        TabBar(
          tabs: [
            Tab(text: 'Tab 1'),
            Tab(text: 'Tab 2'),
            Tab(text: 'Tab 3'),
          ],
        ),
        TabBarView(
          children: [
            // Content for Tab 1
            Container(child: Text('Tab 1 Content')),
            // Content for Tab 2
            Container(child: Text('Tab 2 Content')),
            // Content for Tab 3
            Container(child: Text('Tab 3 Content')),
          ],
        ),
      ],
    ),
  ),
)

В этой статье мы рассмотрели пять различных методов использования DefaultTabController во Flutter для навигации по вкладкам. Мы рассмотрели базовую навигацию с вкладками, динамическую длину вкладок, настраиваемый индикатор вкладок, навигацию с вложенными вкладками и программное управление выбором вкладок. С помощью этих методов вы можете создавать универсальные и интерактивные интерфейсы с вкладками в своем приложении Flutter. Поэкспериментируйте с этими примерами и найдите тот, который лучше всего соответствует вашим потребностям.