Реализация TabBar во Flutter: несколько методов с примерами кода

Flutter TabBar — это виджет, используемый для отображения горизонтального ряда вкладок. Каждая вкладка представляет собой отдельный вид или экран. Вот несколько методов, которые вы можете использовать для реализации TabBar во Flutter, а также примеры кода:

Метод 1: DefaultTabController
DefaultTabController — это встроенный виджет Flutter, который управляет состоянием TabBar и TabBarView. Вот пример:

class MyTabbedScreen extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return DefaultTabController(
      length: 3, // Number of tabs
      child: Scaffold(
        appBar: AppBar(
          title: Text('My Tabbed Screen'),
          bottom: TabBar(
            tabs: [
              Tab(text: 'Tab 1'),
              Tab(text: 'Tab 2'),
              Tab(text: 'Tab 3'),
            ],
          ),
        ),
        body: TabBarView(
          children: [
            // Content of Tab 1
            Center(child: Text('Tab 1')),
            // Content of Tab 2
            Center(child: Text('Tab 2')),
            // Content of Tab 3
            Center(child: Text('Tab 3')),
          ],
        ),
      ),
    );
  }
}

Метод 2: TabController
Вы также можете использовать класс TabController для программного управления поведением TabBar. Вот пример:

class MyTabbedScreen extends StatefulWidget {
  @override
  _MyTabbedScreenState createState() => _MyTabbedScreenState();
}
class _MyTabbedScreenState extends State<MyTabbedScreen>
    with SingleTickerProviderStateMixin {
  late TabController _tabController;
  @override
  void initState() {
    super.initState();
    _tabController = TabController(length: 3, vsync: this);
  }
  @override
  void dispose() {
    _tabController.dispose();
    super.dispose();
  }
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('My Tabbed Screen'),
        bottom: TabBar(
          controller: _tabController,
          tabs: [
            Tab(text: 'Tab 1'),
            Tab(text: 'Tab 2'),
            Tab(text: 'Tab 3'),
          ],
        ),
      ),
      body: TabBarView(
        controller: _tabController,
        children: [
          // Content of Tab 1
          Center(child: Text('Tab 1')),
          // Content of Tab 2
          Center(child: Text('Tab 2')),
          // Content of Tab 3
          Center(child: Text('Tab 3')),
        ],
      ),
    );
  }
}

Метод 3: CupertinoTabBar
Если вы предпочитаете панель вкладок в стиле iOS, вы можете использовать виджет CupertinoTabBar. Вот пример:

import 'package:flutter/cupertino.dart';
class MyTabbedScreen extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return CupertinoTabScaffold(
      tabBar: CupertinoTabBar(
        items: [
          BottomNavigationBarItem(
            icon: Icon(CupertinoIcons.home),
            label: 'Tab 1',
          ),
          BottomNavigationBarItem(
            icon: Icon(CupertinoIcons.search),
            label: 'Tab 2',
          ),
          BottomNavigationBarItem(
            icon: Icon(CupertinoIcons.person),
            label: 'Tab 3',
          ),
        ],
      ),
      tabBuilder: (context, index) {
        return CupertinoTabView(
          builder: (context) {
            switch (index) {
              case 0:
                return Center(child: Text('Tab 1'));
              case 1:
                return Center(child: Text('Tab 2'));
              case 2:
                return Center(child: Text('Tab 3'));
              default:
                return Container();
            }
          },
        );
      },
    );
  }
}