Flutter扩展标签管理插件extended_tabs的使用

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

Flutter扩展标签管理插件extended_tabs的使用

extended_tabs 是一个强大的官方Tab/TabBar/TabView扩展库,它支持在当前Tab滚动超出范围时滚动祖先或子Tab,并且可以设置滚动方向和缓存程度。本文将详细介绍其使用方法并提供完整的示例代码。

一、添加依赖

首先,在pubspec.yaml文件中添加extended_tabs依赖:

dependencies:
  flutter:
    sdk: flutter
  extended_tabs: any

然后执行flutter pub get命令以安装该包。

二、主要功能及用法

1. CarouselIndicator

展示轮播样式指示器。

CarouselIndicator(
  controller: _controller,
  selectedColor: Colors.white,
  unselectedColor: Colors.grey,
  strokeCap: StrokeCap.round,
  indicatorPadding: const EdgeInsets.all(5),
),

2. ColorTabIndicator

显示带有颜色填充的指示器。

TabBar(
  indicator: ColorTabIndicator(Colors.blue),
  labelColor: Colors.black,
  tabs: [
    Tab(text: "Tab0"),
    Tab(text: "Tab1"),
  ],
  controller: tabController,
)

3. Link

当设置为true且当前TabBarView滚动超出范围时,会检查并滚动父级或子级TabBarView,默认值为true。

ExtendedTabBarView(
  children: <Widget>[
    List("Tab000"),
    List("Tab001"),
    List("Tab002"),
    List("Tab003"),
  ],
  controller: tabController2,
  link: true,
)

4. ScrollDirection

设置TabBar和TabView滚动的方向,默认为水平方向(Axis.horizontal)。

Row(
  children: <Widget>[
    ExtendedTabBar(
      indicator: const ColorTabIndicator(Colors.blue),
      labelColor: Colors.black,
      scrollDirection: Axis.vertical,
      tabs: const <ExtendedTab>[
        ExtendedTab(
          text: 'Tab0',
          scrollDirection: Axis.vertical,
        ),
        ExtendedTab(
          text: 'Tab1',
          scrollDirection: Axis.vertical,
        ),
      ],
      controller: tabController,
    ),
    Expanded(
      child: ExtendedTabBarView(
        children: <Widget>[
          const ListWidget(
            'Tab1',
            scrollDirection: Axis.horizontal,
          ),
          const ListWidget(
            'Tab1',
            scrollDirection: Axis.horizontal,
          ),
        ],
        controller: tabController,
        scrollDirection: Axis.vertical,
      ),
    )
  ],
)

5. CacheExtent

设置缓存页面数量,默认为0;如果设置为1,则表示有两个页面被缓存。

ExtendedTabBarView(
  children: <Widget>[
    List("Tab000"),
    List("Tab001"),
    List("Tab002"),
    List("Tab003"),
  ],
  controller: tabController2,
  link: true,
  cacheExtent: 1,
)

6. ShouldIgnorePointerWhenScrolling

是否忽略滚动期间的指针事件,默认为true。如果设置为false,子组件可以在滚动过程中接收点击等交互事件。

ExtendedTabBarView(
  children: <Widget>[
    List("Tab000"),
    List("Tab001"),
    List("Tab002"),
    List("Tab003"),
  ],
  controller: tabController2,
  shouldIgnorePointerWhenScrolling: false,
  cacheExtent: 1,
)

三、完整示例代码

下面是一个完整的Flutter应用示例,演示了如何使用extended_tabs创建一个多Tab页面布局的应用程序。

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

void main() => runApp(MyApp());

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

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

  final String title;

  @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(widget.title),
        bottom: PreferredSize(
          preferredSize: Size.fromHeight(48.0),
          child: ExtendedTabBar(
            controller: _tabController,
            tabs: [
              Tab(text: 'Tab 1'),
              Tab(text: 'Tab 2'),
              Tab(text: 'Tab 3'),
            ],
            scrollDirection: Axis.horizontal,
            indicator: ColorTabIndicator(Colors.redAccent),
            labelColor: Colors.white,
            unselectedLabelColor: Colors.grey,
          ),
        ),
      ),
      body: ExtendedTabBarView(
        controller: _tabController,
        children: [
          Center(child: Text('Content of Tab 1')),
          Center(child: Text('Content of Tab 2')),
          Center(child: Text('Content of Tab 3')),
        ],
        scrollDirection: Axis.horizontal,
        cacheExtent: 1,
        shouldIgnorePointerWhenScrolling: false,
      ),
    );
  }
}

以上代码实现了一个简单的多Tab页面布局,每个Tab都有自己的内容区域,并且通过ExtendedTabBarExtendedTabBarView来管理和展示这些Tab。同时,还展示了如何配置滚动方向、缓存程度以及是否忽略滚动期间的指针事件等功能。希望这个例子能帮助你更好地理解和使用extended_tabs插件。


更多关于Flutter扩展标签管理插件extended_tabs的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter扩展标签管理插件extended_tabs的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是如何在Flutter项目中使用extended_tabs插件的示例代码。extended_tabs是一个用于创建和管理标签页的Flutter插件,它提供了比Flutter默认TabBar更灵活和丰富的功能。

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

dependencies:
  flutter:
    sdk: flutter
  extended_tabs: ^x.y.z  # 请替换为最新版本号

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

接下来,是一个完整的示例代码,展示了如何使用extended_tabs来创建和管理标签页:

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Extended Tabs 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('Extended Tabs Demo'),
        bottom: PreferredSize(
          preferredSize: Size.fromHeight(50),
          child: ExtendedTabBar(
            controller: _tabController,
            tabs: [
              ExtendedTab(
                text: 'Tab 1',
                icon: Icon(Icons.home),
              ),
              ExtendedTab(
                text: 'Tab 2',
                icon: Icon(Icons.star),
              ),
              ExtendedTab(
                text: 'Tab 3',
                icon: Icon(Icons.settings),
              ),
            ],
            indicatorColor: Colors.blue,
            indicatorWeight: 4.0,
            labelColor: Colors.blue,
            unselectedLabelColor: Colors.grey,
            labelStyle: TextStyle(fontSize: 16),
            unselectedLabelStyle: TextStyle(fontSize: 14),
          ),
        ),
      ),
      body: ExtendedTabBarView(
        controller: _tabController,
        children: [
          Center(child: Text('Content of Tab 1')),
          Center(child: Text('Content of Tab 2')),
          Center(child: Text('Content of Tab 3')),
        ],
      ),
    );
  }
}

在这个示例中:

  1. 我们首先导入了extended_tabs包。
  2. 创建了一个包含三个标签页的简单应用。
  3. 使用了ExtendedTabBar来代替默认的TabBar,它允许我们为每个标签页设置图标和文本。
  4. 使用了ExtendedTabBarView来显示与每个标签页相关联的内容。
  5. TabController用于管理标签页的切换。

这个示例展示了extended_tabs插件的基本用法,你可以根据需要进一步自定义和扩展它。例如,可以添加更多复杂的标签页内容,或者调整标签页的样式和布局。

回到顶部