Flutter垂直标签栏插件vertical_tab_bar_view的使用

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

Flutter垂直标签栏插件 vertical_tab_bar_view 的使用

vertical_tab_bar_view 是一个Flutter插件,它允许你创建一个垂直滚动的标签栏,而不需要像默认的 TabBarView 那样自动对齐。这个插件非常简单易用,只需将你的 TabBarView 替换为 VerticalTabBarView 即可。

快速开始

安装插件

首先,在你的 pubspec.yaml 文件中添加 vertical_tab_bar_view 依赖:

dependencies:
  flutter:
    sdk: flutter
  vertical_tab_bar_view: ^0.1.2

然后运行 flutter pub get 来安装插件。

示例代码

以下是一个完整的示例,展示了如何使用 VerticalTabBarView 来创建一个垂直滚动的标签栏。

主应用入口

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

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

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      debugShowCheckedModeBanner: false,
      theme: ThemeData(
        primaryColor: Colors.white,
        accentColor: Colors.redAccent,
      ),
      home: Banner(
        message: 'Example',
        location: BannerLocation.topEnd,
        child: MyHomePage(title: 'Vertical Tab Bar Example'),
      ),
    );
  }
}

主页面

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> with SingleTickerProviderStateMixin {
  final List<Category> categories = [];
  late TabController _tabController;

  void fetchAllCategories() {
    // 模拟获取数据
    setState(() {
      categories.addAll([
        Category(name: 'Category 1'),
        Category(name: 'Category 2'),
        Category(name: 'Category 3'),
      ]);
      _tabController = TabController(length: categories.length, vsync: this);
    });
  }

  [@override](/user/override)
  void initState() {
    fetchAllCategories();
    super.initState();
  }

  [@override](/user/override)
  void dispose() {
    _tabController.dispose();
    super.dispose();
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),
        bottom: _tabController == null
            ? null
            : TabBar(
                controller: _tabController,
                labelColor: Colors.redAccent,
                unselectedLabelColor: Colors.black,
                isScrollable: true,
                tabs: [
                  for (Category category in categories) Tab(text: category.name)
                ],
              ),
      ),
      body: _tabController == null
          ? Center(child: CircularProgressIndicator())
          : VerticalTabBarView(
              controller: _tabController,
              children: [
                for (Category category in categories)
                  TabView(category: category)
              ],
            ),
    );
  }
}

class Category {
  final String name;
  Category({required this.name});
}

标签视图

class TabView extends StatefulWidget {
  const TabView({
    Key? key,
    required this.category,
  }) : super(key: key);

  final Category category;

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

class _TabViewState extends State<TabView> {
  final List<Product> _products = [];

  void fetchProducts(String category) {
    // 模拟获取产品数据
    setState(() {
      _products.addAll([
        Product(name: 'Product 1', category: widget.category.name),
        Product(name: 'Product 2', category: widget.category.name),
      ]);
    });
  }

  [@override](/user/override)
  void initState() {
    fetchProducts(widget.category.name);
    super.initState();
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return SingleChildScrollView(
      child: Column(
        children: [
          Align(
            alignment: Alignment.topLeft,
            child: Padding(
              padding: const EdgeInsets.all(8.0),
              child: Text(
                widget.category.name,
                style: TextStyle(
                  fontWeight: FontWeight.bold,
                  fontSize: 36,
                ),
              ),
            ),
          ),
          for (Product product in _products)
            ListTile(
              title: Text(product.name),
              subtitle: Text(product.category),
              onTap: () {},
            ),
        ],
      ),
    );
  }
}

class Product {
  final String name;
  final String category;
  Product({required this.name, required this.category});
}

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

1 回复

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


当然,以下是如何在Flutter项目中使用vertical_tab_bar_view插件的一个示例。首先,确保你已经在pubspec.yaml文件中添加了该插件的依赖项:

dependencies:
  flutter:
    sdk: flutter
  vertical_tab_bar_view: ^最新版本号  # 请替换为实际的最新版本号

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

接下来是一个完整的示例代码,展示了如何使用vertical_tab_bar_view插件创建一个带有垂直标签栏的页面:

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Vertical Tab Bar View 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 Tab Bar View Example'),
      ),
      body: Padding(
        padding: const EdgeInsets.all(8.0),
        child: Column(
          children: [
            Expanded(
              child: VerticalTabBarView(
                controller: _tabController,
                direction: Axis.vertical,
                children: [
                  Center(child: Text('Tab 1 Content')),
                  Center(child: Text('Tab 2 Content')),
                  Center(child: Text('Tab 3 Content')),
                ],
              ),
            ),
            VerticalTabBar(
              controller: _tabController,
              tabs: [
                Tab(icon: Icon(Icons.directions_car)),
                Tab(icon: Icon(Icons.directions_transit)),
                Tab(icon: Icon(Icons.directions_bike)),
              ],
            ),
          ],
        ),
      ),
    );
  }
}

解释

  1. 依赖项: 确保在pubspec.yaml中添加了vertical_tab_bar_view的依赖项。

  2. 创建应用: MyApp是一个简单的MaterialApp,设置了一个主题并指向MyHomePage

  3. 主页: MyHomePage是一个有状态的widget,包含了一个TabController,用于管理标签栏的状态。

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

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

  6. 构建UI:

    • 使用VerticalTabBarView来显示标签内容,设置directionAxis.vertical以使其垂直排列。
    • 使用VerticalTabBar来显示标签按钮,每个标签按钮都包含一个图标。

注意

  • vertical_tab_bar_view插件的具体API可能会有所不同,因此请参考插件的官方文档以获取最新的使用方法。
  • 如果vertical_tab_bar_view插件不存在或名称有误,请查找是否有其他类似功能的插件或实现方法。

希望这个示例代码能够帮助你理解如何在Flutter中使用vertical_tab_bar_view插件。

回到顶部