Flutter自定义TabBar插件polar_tab_bar的使用

发布于 1周前 作者 htzhanglong 来自 Flutter

Flutter 自定义 TabBar 插件 polar_tab_bar 的使用

Polar Tab Bar 是一个可定制且带有内置 PageView 的圆角标签栏,可以保存用户界面状态。

Polar Tab Bar 有两种类型:PillStep

Pill (PolarTabType.Pill) Step (PolarTabType.Step)
Pill 类型 Gif Step 类型 Gif

开始使用

pubspec.yaml 文件中添加 polar_tab_bar 依赖:

dependencies:
  ...
  polar_tab_bar: ^0.0.2

基本用法

首先创建标签项:

final List<PolarTabItem> tabs = [
  PolarTabItem(
    index: 0,
    title: "Home",
    page: const PolarTabPage(
      child: HomePage(),
    ),
  ),
  PolarTabItem(
    index: 1,
    title: "Category",
    page: const PolarTabPage(child: CategoryPage()),
  ),
  PolarTabItem(
    index: 2,
    title: "Profile",
    page: const PolarTabPage(child: ProfilePage()),
  ),
];

注意:请将子部件包装在 PolarTabPage 中以在每个导航时保存用户界面状态。

然后可以在你的部件中使用 PolarTabBar

Scaffold(
  appBar: AppBar(
    elevation: 0,
    backgroundColor: Colors.indigoAccent,
    title: const Text(
      "Polar Tabbar",
      style: TextStyle(
        color: Colors.white,
        fontSize: 16,
      ),
    ),
  ),
  body: SafeArea(
    child: Padding(
      padding: const EdgeInsets.all(16),
      child: PolarTabBar(
        type: PolarTabType.pill, // 默认类型
        tabs: tabs
      ),
    ),
  ),
)

定制化

  • type (默认: PolarTabType.pill) - 标签栏的类型。
  • pageController (可选) - 如果你需要完全控制内部的 PageView
  • height (可选) - 如果你将 PolarTabBar 放置在滚动父部件(如 ListViewSingleChildScrollView 等)中,则需要指定高度。
  • contentSpacing - 每个标签项之间的间距。
  • innerPadding - 标签项内边距。
  • radius - 标签项的圆角半径。
  • background (可选) - 未激活标签项的背景颜色。
  • activeBackground (可选) - 激活标签项的背景颜色。
  • titleStyle (可选) - 未激活标签项的文本样式。
  • activeTitleStyle (可选) - 激活标签项的文本样式。
  • isDense - 使标签更紧凑。
  • curve - 动画曲线。
  • duration (默认: 300ms) - 动画持续时间。
  • swipable (默认: true) - 使 PageView 可滑动。

示例代码

以下是一个完整的示例代码,展示了如何使用 PolarTabBar 插件:

import 'package:example/pages/category_page.dart';
import 'package:example/pages/home_page.dart';
import 'package:example/pages/profile_page.dart';
import 'package:flutter/material.dart';
import 'package:polar_tab_bar/models/polar_tab_item.dart';
import 'package:polar_tab_bar/polar_tab_bar.dart';
import 'package:polar_tab_bar/widgets/polar_tab_page.dart';

void main() {
  runApp(const PolarTabBarApp());
}

class PolarTabBarApp extends StatelessWidget {
  const PolarTabBarApp({super.key});

  [@override](/user/override)
  Widget build(BuildContext context) {
    final List<PolarTabItem> tabs = [
      PolarTabItem(
        index: 0,
        title: "Home",
        page: const PolarTabPage(
          child: HomePage(),
        ),
      ),
      PolarTabItem(
        index: 1,
        title: "Category",
        page: const PolarTabPage(child: CategoryPage()),
      ),
      PolarTabItem(
        index: 2,
        title: "Profile",
        page: const PolarTabPage(child: ProfilePage()),
      ),
    ];

    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          elevation: 0,
          backgroundColor: Colors.indigoAccent,
          title: const Text(
            "Polar Tabbar",
            style: TextStyle(
              color: Colors.white,
              fontSize: 16,
            ),
          ),
        ),
        body: SafeArea(
          child: Padding(
            padding: const EdgeInsets.all(16),
            child: PolarTabBar(
              tabs: tabs,
            ),
          ),
        ),
      ),
    );
  }
}

更多关于Flutter自定义TabBar插件polar_tab_bar的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter自定义TabBar插件polar_tab_bar的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是如何在Flutter项目中使用polar_tab_bar插件的示例代码。polar_tab_bar是一个自定义TabBar插件,可以为你提供更灵活和美观的Tab切换效果。

首先,确保你已经在pubspec.yaml文件中添加了polar_tab_bar依赖:

dependencies:
  flutter:
    sdk: flutter
  polar_tab_bar: ^最新版本号  # 请替换为最新版本号

然后运行flutter pub get来安装依赖。

接下来,在你的Flutter项目中使用PolarTabBarPolarTabBarView。以下是一个完整的示例代码:

import 'package:flutter/material.dart';
import 'package:polar_tab_bar/polar_tab_bar.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'PolarTabBar Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> 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('PolarTabBar Demo'),
        bottom: PreferredSize(
          preferredSize: Size.fromHeight(kToolbarHeight),
          child: PolarTabBar(
            controller: _tabController,
            tabs: [
              PolarTab(
                icon: Icon(Icons.home),
                text: 'Home',
              ),
              PolarTab(
                icon: Icon(Icons.star),
                text: 'Favorites',
              ),
              PolarTab(
                icon: Icon(Icons.settings),
                text: 'Settings',
              ),
            ],
            indicator: PolarTabBarIndicator(
              color: Colors.blue,
              height: 4.0,
              borderRadius: BorderRadius.circular(8.0),
            ),
            labelStyle: TextStyle(fontSize: 14),
            unselectedLabelStyle: TextStyle(fontSize: 14, color: Colors.grey),
          ),
        ),
      ),
      body: PolarTabBarView(
        controller: _tabController,
        children: [
          Center(child: Text('Home Tab')),
          Center(child: Text('Favorites Tab')),
          Center(child: Text('Settings Tab')),
        ],
      ),
    );
  }
}

代码解释:

  1. 依赖引入:确保在pubspec.yaml中添加了polar_tab_bar依赖。
  2. 状态管理:在_MyHomePageState中使用TabController来管理Tab的状态。
  3. PolarTabBar:在AppBarbottom属性中使用PolarTabBar。可以自定义每个Tab的图标和文本。
  4. PolarTabBarIndicator:自定义TabBar的指示器样式,包括颜色、高度和圆角。
  5. PolarTabBarView:与PolarTabBar配合使用的视图部分,根据当前选中的Tab显示不同的内容。

这样,你就可以在你的Flutter应用中使用polar_tab_bar来实现自定义的Tab切换效果了。根据实际需求,你可以进一步自定义Tab的样式和行为。

回到顶部