Flutter动画标签栏插件easy_animated_tabbar的使用

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

Flutter动画标签栏插件easy_animated_tabbar的使用

也许你想要一个没有任何额外页面的标签栏,这个包可以帮助你创建你的标签栏。此外,有时你可能想创建一个可选择的按钮列表。

动画标签栏示例

开始使用

你可以简单地使用它:

EasyAnimatedTab(
  buttonTitles: ['button1', 'button2'], // 按钮标题列表
  onSelected: (index) {}, // 选中按钮时的回调函数
),

或者添加额外选项来自定义它:

EasyAnimatedTab(
  buttonTitles: buttons, // 按钮标题列表
  onSelected: (index) {}, // 选中按钮时的回调函数
  animationDuration: 500, // 动画持续时间(毫秒)
  minWidthOfItem: 70, // 每个按钮的最小宽度
  minHeightOfItem: 40, // 每个按钮的最小高度
  deActiveItemColor: Colors.grey, // 非激活状态的颜色
  activeItemColor: Colors.redAccent, // 激活状态的颜色
  activeTextStyle: TextStyle(color: Colors.white, fontSize: 14), // 激活状态的文字样式
  deActiveTextStyle: TextStyle(color: Colors.redAccent, fontSize: 14), // 非激活状态的文字样式
),

包含的选项

  • List<String> buttonTitles: 按钮标题列表
  • void Function(int) onSelected: 返回选中的索引
  • int selectedIndex: 初始选中项的索引,默认值为0
  • int animationDuration: 动画持续时间(毫秒)
  • double minWidthOfItem: 每个按钮的最小宽度,默认值为80
  • double minHeightOfItem: 每个按钮的最小高度,默认值为40
  • Color deActiveItemColor: 非激活状态的颜色
  • Color activeItemColor: 激活状态的颜色
  • TextStyle activeTextStyle: 激活状态的文字样式
  • TextStyle deActiveTextStyle: 非激活状态的文字样式
  • double activeBorderRadius: 激活状态的边框圆角
  • double deActiveBorderRadius: 非激活状态的边框圆角

完整示例代码

下面是一个完整的Flutter应用示例,展示如何使用easy_animated_tabbar插件:

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

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

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Easy App Bar',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(title: 'Flutter Demo Home Page'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  MyHomePage({Key? key, required this.title}) : super(key: key);
  final String title;

  [@override](/user/override)
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  List<String> buttons = ['button1', 'button2', 'button3'];
  List<String> buttons2 = ['all', 'personal', 'groups', 'social', 'educations'];

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      body: Column(
        mainAxisAlignment: MainAxisAlignment.center,
        children: [
          // 简单使用
          EasyAnimatedTab(
            buttonTitles: buttons,
            onSelected: (index) {
              print('Selected index: $index');
            },
          ),
          SizedBox(height: 16),

          // 自定义选项
          EasyAnimatedTab(
            buttonTitles: buttons,
            onSelected: (index) {
              print('Selected index: $index');
            },
            animationDuration: 500,
            minWidthOfItem: 70,
            minHeightOfItem: 40,
            deActiveItemColor: Colors.grey,
            activeItemColor: Colors.redAccent,
            activeTextStyle: TextStyle(color: Colors.white, fontSize: 14),
            deActiveTextStyle: TextStyle(color: Colors.redAccent, fontSize: 14),
          ),
          SizedBox(height: 16),

          // 自定义边框圆角
          EasyAnimatedTab(
            buttonTitles: buttons,
            onSelected: (index) {
              print('Selected index: $index');
            },
            animationDuration: 500,
            minWidthOfItem: 70,
            minHeightOfItem: 40,
            deActiveItemColor: Colors.grey,
            activeItemColor: Colors.redAccent,
            activeBorderRadius: 20,
            deActiveBorderRadius: 16,
            activeTextStyle: TextStyle(color: Colors.white, fontSize: 14),
            deActiveTextStyle: TextStyle(color: Colors.redAccent, fontSize: 14),
          ),
          SizedBox(height: 16),

          // 更多按钮和自定义样式
          EasyAnimatedTab(
            buttonTitles: buttons2,
            onSelected: (index) {
              print('Selected index: $index');
            },
            animationDuration: 800,
            minWidthOfItem: 70,
            minHeightOfItem: 40,
            deActiveItemColor: Colors.grey.withOpacity(0.3),
            activeItemColor: Colors.green,
            activeBorderRadius: 0,
            deActiveBorderRadius: 0,
            activeTextStyle: TextStyle(color: Colors.white, fontSize: 14),
            deActiveTextStyle: TextStyle(color: Colors.black, fontSize: 14),
          ),
        ],
      ),
    );
  }
}

更多关于Flutter动画标签栏插件easy_animated_tabbar的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter动画标签栏插件easy_animated_tabbar的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,下面是一个关于如何使用 easy_animated_tabbar 插件在 Flutter 中实现动画标签栏的示例代码。easy_animated_tabbar 是一个强大的 Flutter 插件,它允许开发者创建带有平滑动画效果的标签栏。

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

dependencies:
  flutter:
    sdk: flutter
  easy_animated_tabbar: ^0.1.1  # 请确保使用最新版本

然后,运行 flutter pub get 来获取依赖。

接下来,这里是一个完整的示例代码,展示了如何使用 easy_animated_tabbar

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Easy Animated TabBar Example'),
        ),
        body: EasyAnimatedTabBarDemo(),
      ),
    );
  }
}

class EasyAnimatedTabBarDemo extends StatefulWidget {
  @override
  _EasyAnimatedTabBarDemoState createState() => _EasyAnimatedTabBarDemoState();
}

class _EasyAnimatedTabBarDemoState extends State<EasyAnimatedTabBarDemo> 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 Column(
      children: [
        SizedBox(
          height: 60,
          child: EasyAnimatedTabBar(
            controller: _tabController,
            tabs: [
              Tab(icon: Icon(Icons.directions_car)),
              Tab(icon: Icon(Icons.directions_transit)),
              Tab(icon: Icon(Icons.directions_bike)),
            ],
            indicatorColor: Colors.blue,
            textStyle: TextStyle(color: Colors.black),
            barBackgroundColor: Colors.white,
            borderRadius: BorderRadius.circular(20),
          ),
        ),
        Expanded(
          child: TabBarView(
            controller: _tabController,
            children: [
              Center(child: Text('Car Tab')),
              Center(child: Text('Transit Tab')),
              Center(child: Text('Bike Tab')),
            ],
          ),
        ),
      ],
    );
  }
}

代码解释:

  1. 依赖导入: 首先,我们在 pubspec.yaml 文件中添加了 easy_animated_tabbar 依赖。

  2. 主应用入口MyApp 类是我们的主应用入口,它包含了一个 ScaffoldScaffoldbody 属性设置为 EasyAnimatedTabBarDemo

  3. 动画标签栏演示EasyAnimatedTabBarDemo 是一个有状态的组件,它使用 TabController 来管理标签页的切换。

  4. 初始化: 在 initState 方法中,我们初始化了 TabController

  5. 资源释放: 在 dispose 方法中,我们释放了 TabController 的资源。

  6. 构建 UI: 在 build 方法中,我们构建了一个 Column,其中包含一个 SizedBox 包裹的 EasyAnimatedTabBar 和一个 Expanded 包裹的 TabBarViewEasyAnimatedTabBar 用于显示标签,而 TabBarView 用于显示与标签对应的视图内容。

这个示例展示了如何使用 easy_animated_tabbar 插件创建一个带有平滑动画效果的标签栏。你可以根据需要进一步自定义标签栏的样式和行为。

回到顶部