Flutter自定义标签页插件fancy_tab的使用

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

Flutter自定义标签页插件fancy_tab的使用

Fancy Tab 插件简介

它是一个精美且美观的标签栏设计。它可以高度定制,并且易于与 PageView.builder 配合使用。

Fancy Tab 动画演示

安装

pubspec.yaml 文件中添加以下依赖:

dependencies:
  fancy_tab: ^0.0.4

导入

在 Dart 文件中导入插件:

import 'package:fancy_tab/fancy_tab.dart';

支持平台

平台 Android iOS Web Windows macOS Linux
支持状态 ✅️ ✅️ ✅️ ✅️ ✅️ ✅️

如何使用

可用参数

以下是 FancyTab 的构造函数及其参数说明:

FancyTab({
  Key? key,
  required this.selected,
  required this.labelsList,
  required this.length,
  this.onTap,
  this.textDirection = TextDirection.ltr,
  this.selectedColor = const Color(0xFF2196F3),
  this.unSelectedColor = const Color(0xA69E9E9E),
  this.selectedTextColor = const Color(0xFFFFFFFF),
  this.unSelectedTextColor = const Color(0xFF7A7A7A),
  this.borderColor = const Color(0xFF000000),
  this.separator = 5,
  this.tabBarHeight = 50,
});

参数表

参数名称 数据类型 默认值
selected int null
labelsList List null
length int null
onTap void Function?(int)? null
textDirection TextDirection? TextDirection.ltr
selectedColor Color? Color(0xFF2196F3)
unSelectedColor Color? Color(0xA69E9E9E)
selectedTextColor Color? Color(0xFFFFFFFF)
unSelectedTextColor Color? Color(0xFF7A7A7A)
borderColor Color? Color(0xFF000000)
separator double? 5.0
tabBarHeight double? 50.0

示例代码

以下是一个完整的示例代码,展示如何使用 fancy_tab 插件创建一个带有动态背景色的标签页:

import 'dart:math';
import 'package:flutter/material.dart';
import 'package:fancy_tab/fancy_tab.dart';

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

class MyApp extends StatefulWidget {
  const MyApp({Key? key}) : super(key: key);

  [@override](/user/override)
  State<MyApp> createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  int selected = 0; // 当前选中的标签页索引
  List<String> labelsList = ['测试 1', '测试 2', '测试 3']; // 标签页文本
  Color? backgroundColor; // 动态背景颜色
  PageController? pageController = PageController(); // 页面控制器

  [@override](/user/override)
  void initState() {
    super.initState();
    randomColorGenerator(); // 初始化随机背景色
  }

  // 随机生成背景颜色
  randomColorGenerator() {
    setState(() {
      backgroundColor = Color((Random().nextDouble() * 0xFFFFFF).toInt())
          .withOpacity(1.0);
    });
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          elevation: 0,
          title: const Text('Fancy Tab 示例'),
        ),
        body: Container(
          color: backgroundColor, // 设置动态背景色
          child: Column(
            children: [
              Center(
                child: Padding(
                  padding: const EdgeInsets.symmetric(vertical: 10),
                  child: FancyTab(
                    selected: selected, // 当前选中的标签页索引
                    labelsList: labelsList, // 标签页文本列表
                    length: labelsList.length, // 标签页数量
                    selectedColor: Colors.orange, // 选中标签的颜色
                    unSelectedColor: Colors.deepOrangeAccent, // 未选中标签的颜色
                    onTap: (val) { // 点击标签页回调
                      setState(() {
                        selected = val; // 更新当前选中的标签页索引
                        pageController!.jumpToPage(val); // 跳转到对应的页面
                        randomColorGenerator(); // 更新背景颜色
                      });
                    },
                  ),
                ),
              ),
              Expanded(
                child: PageView.builder(
                  onPageChanged: (val) { // 页面切换时更新选中标签
                    setState(() {
                      selected = val;
                      randomColorGenerator();
                    });
                  },
                  controller: pageController, // 页面控制器
                  itemCount: labelsList.length, // 页面数量
                  itemBuilder: (context, index) {
                    return Column(
                      crossAxisAlignment: CrossAxisAlignment.stretch,
                      mainAxisAlignment: MainAxisAlignment.center,
                      children: [
                        Center(
                          child: Container(
                            padding: const EdgeInsets.all(10),
                            child: Text(
                              labelsList[index].toUpperCase(), // 显示大写的标签文本
                              style: Theme.of(context).textTheme.headline2,
                            ),
                          ),
                        ),
                      ],
                    );
                  },
                ),
              ),
            ],
          ),
        ),
      ),
    );
  }
}

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

1 回复

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


fancy_tab 是一个用于 Flutter 的自定义标签页插件,它允许开发者创建具有丰富动画效果和自定义样式的标签页。以下是如何使用 fancy_tab 插件的详细步骤。

1. 添加依赖

首先,你需要在 pubspec.yaml 文件中添加 fancy_tab 插件的依赖。

dependencies:
  flutter:
    sdk: flutter
  fancy_tab: ^1.0.0  # 请使用最新版本

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

2. 导入包

在你的 Dart 文件中导入 fancy_tab 包。

import 'package:fancy_tab/fancy_tab.dart';

3. 使用 FancyTab 组件

FancyTab 组件允许你创建带有动画效果的标签页。以下是一个简单的示例:

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: FancyTabExample(),
    );
  }
}

class FancyTabExample extends StatefulWidget {
  @override
  _FancyTabExampleState createState() => _FancyTabExampleState();
}

class _FancyTabExampleState extends State<FancyTabExample> {
  int _currentIndex = 0;

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Fancy Tab Example'),
      ),
      body: FancyTab(
        currentIndex: _currentIndex,
        onTabChanged: (index) {
          setState(() {
            _currentIndex = index;
          });
        },
        tabs: [
          FancyTabItem(
            icon: Icons.home,
            title: 'Home',
          ),
          FancyTabItem(
            icon: Icons.business,
            title: 'Business',
          ),
          FancyTabItem(
            icon: Icons.school,
            title: 'School',
          ),
        ],
        pages: [
          Center(child: Text('Home Page')),
          Center(child: Text('Business Page')),
          Center(child: Text('School Page')),
        ],
      ),
    );
  }
}

4. 自定义 FancyTab

FancyTab 提供了多种自定义选项,例如:

  • indicatorColor: 设置指示器的颜色。
  • indicatorHeight: 设置指示器的高度。
  • tabBackgroundColor: 设置标签的背景颜色。
  • activeTabColor: 设置活动标签的颜色。
  • inactiveTabColor: 设置非活动标签的颜色。
  • tabPadding: 设置标签的内边距。
  • tabMargin: 设置标签的外边距。
FancyTab(
  currentIndex: _currentIndex,
  onTabChanged: (index) {
    setState(() {
      _currentIndex = index;
    });
  },
  tabs: [
    FancyTabItem(
      icon: Icons.home,
      title: 'Home',
    ),
    FancyTabItem(
      icon: Icons.business,
      title: 'Business',
    ),
    FancyTabItem(
      icon: Icons.school,
      title: 'School',
    ),
  ],
  pages: [
    Center(child: Text('Home Page')),
    Center(child: Text('Business Page')),
    Center(child: Text('School Page')),
  ],
  indicatorColor: Colors.blue,
  indicatorHeight: 4.0,
  tabBackgroundColor: Colors.white,
  activeTabColor: Colors.blue,
  inactiveTabColor: Colors.grey,
  tabPadding: EdgeInsets.all(10.0),
  tabMargin: EdgeInsets.symmetric(horizontal: 5.0),
);
回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!