Flutter可滚动标签页插件scrollable_tab_view的使用

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

Flutter可滚动标签页插件scrollable_tab_view的使用

简介

scrollable_tab_view 是一个Flutter包,它提供了一个垂直可滚动的标签栏组件,允许您显示可调整大小的标签。该组件使得在Flutter应用中实现类似标签页的界面变得简单。

版本与许可

安装

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

dependencies:
  scrollable_tab_view: ^latest-version

2. 导入包:

import 'package:scrollable_tab_view/scrollable_tab_view.dart';

使用方法

不使用控制器的ScrollableTab

这是一个简单的例子,展示了如何创建一个不带控制器的可滚动标签页。

ScrollableTab(
  labelColor: Colors.black,
  tabs: List.generate(
      5,
      (index) => Tab(
            text: 'index $index',
          )),
  children: List.generate(
      5,
      (index) => ListTile(
            title: Center(
              child: Text(
                'tab Number $index',
                style: Theme.of(context).textTheme.labelLarge!.copyWith(fontSize: 20.0 + (30 * index)),
              ),
            ),
          )),
),

使用控制器的ScrollableTabBar和ScrollableTabViewWithController

如果需要更复杂的控制,比如手动切换标签或与其他部件同步,则可以使用带有控制器的方式。

Column(
  children: [
    ScrollableTabBar(
      labelColor: Colors.black,
      controller: controller,
      tabs: List.generate(
          5,
          (index) => Tab(
                text: 'index $index',
              )),
    ),
    ScrollableTabViewWithController(
      controller: controller,
      children: List.generate(
          5,
          (index) => ListTile(
                title: Center(
                  child: Text(
                    'tab Number $index',
                    style: Theme.of(context).textTheme.labelLarge!.copyWith(fontSize: 20.0 + (30 * index)),
                  ),
                ),
              )),
    )
  ],
),

完整示例代码

下面是一个完整的示例应用程序,演示了如何使用scrollable_tab_view插件。

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

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

class MyApp extends StatefulWidget {
  const MyApp({super.key});

  @override
  State<MyApp> createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> with TickerProviderStateMixin {
  late TabController controller;

  @override
  void initState() {
    // 初始化TabController
    controller = TabController(length: 5, vsync: this);
    super.initState();
  }

  @override
  void dispose() {
    // 释放资源
    controller.dispose();
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('Scrollable Tab View'),
        ),
        body: SingleChildScrollView(
          child: Column(
            children: [
              // 滚动标签页
              const TitleWidget(title: 'ScrollableTab widget'),
              ScrollableTab(
                labelColor: Colors.black,
                onTap: (value) {
                  if (kDebugMode) {
                    print('index $value');
                  }
                },
                tabs: List.generate(5, (index) => Tab(text: 'index $index')),
                children: List.generate(
                    5,
                    (index) => ListTile(
                          title: Center(
                            child: Text(
                              'tab Number $index',
                              style: Theme.of(context).textTheme.labelLarge!.copyWith(fontSize: 20.0 + (30 * index)),
                            ),
                          ),
                        )),
              ),
              // 带有控制器的滚动标签栏
              const TitleWidget(title: 'ScrollableTabBar'),
              ScrollableTabBar(
                labelColor: Colors.black,
                controller: controller,
                tabs: List.generate(5, (index) => Tab(text: 'index $index')),
              ),
              ScrollableTabViewWithController(
                controller: controller,
                children: List.generate(
                    5,
                    (index) => ListTile(
                          title: Center(
                            child: Text(
                              'tab Number $index',
                              style: Theme.of(context).textTheme.labelLarge!.copyWith(fontSize: 20.0 + (30 * index)),
                            ),
                          ),
                        )),
              )
            ],
          ),
        ),
      ),
    );
  }
}

// 标题组件
class TitleWidget extends StatelessWidget {
  final String title;
  const TitleWidget({
    Key? key,
    required this.title,
  }) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return Center(
      child: Padding(
        padding: const EdgeInsets.all(15),
        child: Text(
          title,
          style: Theme.of(context).textTheme.headlineMedium,
        ),
      ),
    );
  }
}

这个例子包括两个部分:一个是直接使用ScrollableTab,另一个是结合ScrollableTabBarScrollableTabViewWithController来展示更复杂的用法。希望这可以帮助您更好地理解和使用scrollable_tab_view插件。


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

1 回复

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


当然,下面是一个关于如何在Flutter中使用 scrollable_tab_view 插件来实现可滚动标签页的示例代码。

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

dependencies:
  flutter:
    sdk: flutter
  scrollable_tab_view: ^1.0.0  # 请检查最新版本号

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

接下来是示例代码,展示如何使用 scrollable_tab_view 插件:

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Scrollable Tab 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: 5, vsync: this);
  }

  @override
  void dispose() {
    _tabController.dispose();
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Scrollable Tab View Example'),
        bottom: PreferredSize(
          preferredSize: Size.fromHeight(kToolbarHeight),
          child: ScrollableTabBar(
            controller: _tabController,
            tabs: List.generate(5, (index) {
              return Tab(
                text: "Tab ${index + 1}",
              );
            }),
          ),
        ),
      ),
      body: TabView(
        controller: _tabController,
        children: List.generate(5, (index) {
          return Center(
            child: Text(
              "Content of Tab ${index + 1}",
              style: TextStyle(fontSize: 24),
            ),
          );
        }),
      ),
    );
  }
}

代码解释

  1. 依赖项

    • 确保在 pubspec.yaml 中添加了 scrollable_tab_view 依赖项。
  2. MyApp

    • 创建一个 MaterialApp 并设置标题和主题。
  3. MyHomePage

    • 创建一个有状态的 MyHomePage 组件。
    • initState 中初始化 TabController,长度设置为5(表示有5个标签页)。
    • dispose 中释放 TabController 资源。
  4. AppBar

    • 使用 AppBar 来显示应用的标题和自定义的 ScrollableTabBar
    • ScrollableTabBar 接受一个 TabController 和一个 tabs 列表,每个 Tab 代表一个标签。
  5. TabView

    • 使用 TabView 来显示与标签对应的内容。
    • TabView 也接受一个 TabController 和一个 children 列表,每个 child 对应一个标签的内容。

运行应用

保存代码并运行 flutter run,你应该会看到一个包含5个可滚动标签的应用,每个标签对应不同的内容。

希望这个示例代码能帮助你理解如何在Flutter中使用 scrollable_tab_view 插件来实现可滚动标签页。

回到顶部