搜索插件、代码仓与 APP 分类

GitHub 代码仓firatcetiner/scrollable_list_tabview

可滚动列表标签视图

一个 Flutter 小部件,用于同步 ListView 和自定义标签视图。

可滚动列表标签视图 项目封面
星标
22
复刻
27
最近推送(UTC)
2022年12月1日
项目状态
未归档

原始 README

以下为英文项目原文快照,最新内容请访问 GitHub。

scrollable_list_tabview

Build Status Codemagic build status Coverage Status

A Flutter widget which synchronize a ScrollView and a custom tab view.

The main idea is to create a custom tab view synchronizing with inner ScrollView. The scroll activity will trigger custom tab view at the top to follow the index of the inner scroll view widget.

Demo

Installation

Add dependency for package on your pubspec.yaml:

dependencies:
    scrollable_list_tabview: <latest>

Usage

To use this widget we must first define how our tabs will look like.

ListTab
Parameter Definition
Widget icon Trailing widget for a tab, typically an Icon.
Widget label Label to be shown in the tab, must be non-null.
BorderRadiusGeometry borderRadius BorderRadius value for a single tab.
Color activeBackgroundColor Color to be used when the tab is selected.
Color inactiveBackgroundColor Color to be used when the tab isn't selected.
bool showIconInList Decide whether show icon widget in the scrollable view.
Color borderColor Color of the border of tab when its not selected

Then we can use LisTab in ScrollableListTab.

ScrollableListTab
Parameter Definition
ListTab tab Data model used for rendering tab widgets.
ScrollView body An individual inner scrollable widget.

Then ScrollableListTabView will take a list of ScrollableListTab as an argument.

ScrollableListTabView
Parameter Definition
List<ScrollableListTab> tabs List of tabs to be built.
double height Height of the tab at the top of the view.
Duration tabAnimationDuration Duration of tab change animation.
Duration bodyAnimationDuration Duration of inner scroll view animation.
Curve tabAnimationCurve Animation curve used when animating tab change.
Curve bodyAnimationCurve Animation curve used when changing index of inner ScrollView(s).

Example

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

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

class MyApp extends StatelessWidget {
  // This widget is the root of your application.
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      debugShowCheckedModeBanner: false,
      theme: ThemeData(
        primarySwatch: Colors.blue,
        visualDensity: VisualDensity.adaptivePlatformDensity,
      ),
      home: MyHomePage(title: 'Flutter ScrollableListTabView Example'),
    );
  }
}

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

  final String title;

  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),
      ),
      body: ScrollableListTabView(
        tabHeight: 48,
        tabs: [
          ScrollableListTab(
              tab: ListTab(label: Text('Label 1'), icon: Icon(Icons.group)),
              body: ListView.builder(
                shrinkWrap: true,
                physics: NeverScrollableScrollPhysics(),
                itemCount: 10,
                itemBuilder: (_, index) => ListTile(
                  leading: Container(
                    height: 40,
                    width: 40,
                    decoration: BoxDecoration(
                        shape: BoxShape.circle, color: Colors.grey),
                    alignment: Alignment.center,
                    child: Text(index.toString()),
                  ),
                  title: Text('List element $index'),
                ),
              )),
        ],
      ),
    );
  }
}

Limitations & Considerations

There are some limitations on this package. For example we only support ScrollView to be the body. Also, we could have used builder pattern to build the widgets.

I would like to thank Google developers for creating awesome package called ScrollablePositionedList.

Contribution

Contributions are accepted via pull requests. For more information about how to contribute to this package, please check the contribution guide.

License

This project is licensed under the MIT license, additional knowledge about the license can be found here.

Fırat Çetiner GitHub avatar
GitHub 作者

Fırat Çetiner ↗

Computer Engineer

ColendiIstanbul
语言DartSwiftKotlinObjective-C

此仓库发布的插件

使用的依赖

依赖清单 3 项

如何选择适合项目的代码仓?

先按使用场景筛选,再比较项目活跃情况,最后到原始仓库核对使用要求。

  1. 通过仓库名、作者或描述搜索,再按技术分类缩小范围。
  2. 结合星标、复刻与最近推送比较项目;星标反映社区关注,不代表质量保证。
  3. 使用前在 GitHub 核对 README、许可证与 Issues。

来源与维护

“A repository is the most basic element of GitHub.”

GitHub Docs — About repositories ↗