Flutter垂直滚动标签页插件vertical_scrollable_tabview的使用

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

Flutter垂直滚动标签页插件vertical_scrollable_tabview的使用

vertical_scrollable_tabview 是一个Flutter插件,它允许创建一个自定义的标签视图,并使其与内部的ScrollView同步。当用户滚动时,顶部的自定义标签视图会根据内层滚动视图的位置自动更新。

安装

在您的pubspec.yaml文件中添加依赖:

dependencies:
  vertical_scrollable_tabview: ^1.0.0
  scroll_to_index: ^2.0.0

确保您使用的是最新版本。

使用方法

VerticalScrollableTabView

为了使用这个组件,您需要实现TabControllerAutoScrollController。以下是关键参数的解释:

  • autoScrollController: 滚动条和CustomScrollView的控制器。
  • tabController: Tab的控制器,通常用于管理TabBar的状态。
  • listItemData: 必须是List<dynamic>类型的数据列表。
  • eachItemChild: 列表项的子组件,接收两个参数:数据对象和索引。
  • verticalScrollPosition: 初始位置。
  • TabBar: 必须放置在SliverAppBar的底部。

此外,该组件还支持从Scrollbar和CustomScrollView复制的多个参数,如scrollbarThumbVisibility, scrollDirection, reverse等,以提供更灵活的配置选项。

示例代码

下面是一个完整的示例demo,展示了如何使用VerticalScrollableTabView来创建一个带有可滚动标签栏的应用界面。

import 'package:flutter/material.dart';
import 'package:vertical_scrollable_tabview/vertical_scrollable_tabview.dart';
import 'package:scroll_to_index/scroll_to_index.dart';

// 假设CategorySection和ExampleData是已经定义好的类或函数
import 'category_section.dart'; // 自定义的分类部分组件
import 'example_data.dart';     // 示例数据源

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

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

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Vertical Scrollable TabView Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: const MyHomePage(title: 'Vertical Scrollable TabView Plugin'),
    );
  }
}

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

  @override
  State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage>
    with SingleTickerProviderStateMixin {
  final List<Category> data = ExampleData.data;

  late TabController tabController;
  late AutoScrollController autoScrollController;

  @override
  void initState() {
    tabController = TabController(length: data.length, vsync: this);
    autoScrollController = AutoScrollController();
    super.initState();
  }

  @override
  void dispose() {
    tabController.dispose();
    autoScrollController.dispose();
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      backgroundColor: Colors.white,
      body: VerticalScrollableTabView(
        autoScrollController: autoScrollController,
        scrollbarThumbVisibility: false,
        tabController: tabController,
        listItemData: data,
        verticalScrollPosition: VerticalScrollPosition.begin,
        eachItemChild: (object, index) =>
            CategorySection(category: object as Category),
        slivers: [
          SliverAppBar(
            pinned: true,
            expandedHeight: 250.0,
            flexibleSpace: const FlexibleSpaceBar(
              title: Text("SliverAppBar"),
              titlePadding: EdgeInsets.only(bottom: 50),
              collapseMode: CollapseMode.pin,
              background: FlutterLogo(),
            ),
            bottom: TabBar(
              isScrollable: true,
              controller: tabController,
              indicatorPadding: const EdgeInsets.symmetric(horizontal: 16.0),
              indicatorColor: Colors.cyan,
              labelColor: Colors.cyan,
              unselectedLabelColor: Colors.white,
              indicatorWeight: 3.0,
              tabs: data.map((e) {
                return Tab(text: e.title);
              }).toList(),
              onTap: (index) {
                VerticalScrollableTabBarStatus.setIndex(index);
              },
            ),
          ),
        ],
      ),
    );
  }
}

请注意,为了使上述代码正常工作,您还需要定义CategorySectionExampleData这两个辅助类或函数。它们分别用于显示每个类别的内容以及提供初始数据集。

以上就是关于vertical_scrollable_tabview插件的基本介绍及使用方式。希望这对您有所帮助!如果您有任何问题或者需要进一步的帮助,请随时提问。


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

1 回复

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


当然,以下是如何在Flutter中使用vertical_scrollable_tabview插件的示例代码。vertical_scrollable_tabview 是一个允许你在 Flutter 应用中实现垂直滚动标签页的插件。

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

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

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

接下来,是一个简单的示例代码,展示了如何使用 VerticalScrollableTabView 创建一个垂直滚动的标签页视图:

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Vertical Scrollable TabView Example',
      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('Vertical Scrollable TabView'),
      ),
      body: VerticalScrollableTabView(
        controller: _tabController,
        header: Builder(
          builder: (BuildContext context) {
            return Container(
              height: 60.0,
              decoration: BoxDecoration(
                color: Colors.white,
                boxShadow: [
                  BoxShadow(
                    color: Colors.grey.withOpacity(0.2),
                    spreadRadius: 5,
                    blurRadius: 7,
                    offset: Offset(0, 3), // changes position of shadow
                  ),
                ],
              ),
              child: TabBar(
                isScrollable: true,
                tabs: [
                  Tab(icon: Icon(Icons.directions_car), text: 'Tab 1'),
                  Tab(icon: Icon(Icons.directions_transit), text: 'Tab 2'),
                  Tab(icon: Icon(Icons.directions_bike), text: 'Tab 3'),
                ],
                controller: _tabController,
                indicatorColor: Colors.blue,
                labelColor: Colors.blue,
                unselectedLabelColor: Colors.grey,
                labelStyle: TextStyle(fontSize: 16),
                unselectedLabelStyle: TextStyle(fontSize: 16),
              ),
            );
          },
        ),
        body: TabBarView(
          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. 依赖添加:在 pubspec.yaml 文件中添加 vertical_scrollable_tabview 插件的依赖。

  2. 创建应用:创建一个 MyApp 类,它使用 MaterialApp 作为根组件。

  3. 主页构建:在 MyHomePage 类中,使用 StatefulWidget 并创建一个 TabController 来管理标签页的状态。

  4. 初始化控制器:在 initState 方法中初始化 TabController

  5. 释放资源:在 dispose 方法中释放 TabController 的资源。

  6. 构建 UI:在 build 方法中,使用 VerticalScrollableTabView 组件来创建垂直滚动的标签页视图。header 参数是一个 TabBar,而 body 参数是一个 TabBarView,它们分别定义了标签页的头部和主体内容。

这样,你就可以在 Flutter 应用中实现一个垂直滚动的标签页视图了。希望这个示例对你有帮助!

回到顶部