scrollable_list_tab_scroller
一个可定制的Flutter小部件,可将ScrollView与PageView同步作为选项卡。
创建自定义页面视图作为选项卡,并与内部ScrollView同步。页面视图跟随滚动视图的索引,反之亦然。
安装
在pubspec.yaml文件中为包添加依赖项
dependencies:
scrollable_list_tab_scroller: <latest>
用法
要使用此小部件,我们必须首先定义我们的选项卡外观。
ScrollableListTabScroller
| 参数 | 定义 |
|---|---|
int itemCount |
将构建的项目数量。 |
IndexedWidgetBuilder itemBuilder |
列表项的构建器。 |
IndexedActiveStatusWidgetBuilder tabBuilder |
带有活动状态的选项卡构建器,用于自定义。 |
HeaderBuilder? headerBuilder |
用于自定义的可选头部构建器。 |
ItemScrollController? itemScrollController |
项目列表的可选控制器。 |
PageController? tabPageController |
选项卡的可选控制器。 |
ItemPositionsListener? itemPositionsListener |
项目列表位置的可选监听器。 |
void Function(int)? tabChanged |
选项卡更改的可选监听器。 |
double minEdgeBeforeChangeTab |
在列表项到达边缘之前更改索引的可选高度百分比(默认为0)。 |
示例
import 'package:flutter/material.dart';
import 'package:scrollable_list_tab_scroller/scrollable_list_tab_scroller.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: 'Scrollable List Tab Scroller',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: MyHomePage(title: 'Scrollable List Tab Scroller'),
);
}
}
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> {
final data = {
"Category A": [
"Item 1 (A)",
"Item 2 (A)",
"Item 3 (A)",
"Item 4 (A)",
],
"Category B": [
"Item 1 (B)",
"Item 2 (B)",
],
"Category C": [
"Item 1 (C)",
"Item 2 (C)",
"Item 3 (C)",
"Item 4 (C)",
"Item 5 (C)",
],
"Category D": [
"Item 1 (D)",
"Item 2 (D)",
"Item 3 (D)",
"Item 4 (D)",
"Item 5 (D)",
"Item 6 (D)",
"Item 7 (D)",
"Item 8 (D)",
"Item 9 (D)",
],
};
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(widget.title),
),
body: ScrollableListTabScroller(
tabBuilder: (BuildContext context, int index, bool active) => Text(
data.keys.elementAt(index),
style: !active
? null
: TextStyle(fontWeight: FontWeight.bold, color: Colors.green),
),
itemCount: data.length,
itemBuilder: (BuildContext context, int index) => Column(
children: [
Text(
data.keys.elementAt(index),
style: TextStyle(fontWeight: FontWeight.bold, fontSize: 20),
),
...data.values
.elementAt(index)
.asMap()
.map(
(index, value) => MapEntry(
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(value),
),
),
)
.values
],
),
));
}
}
局限性与注意事项
选项卡滚动器有限制,它基于PageView构建,对选项卡的自定义可能性较小。
此小部件受到 scrollable_list_tabview 的启发。
许可证
本项目根据MIT许可证授权,有关该许可证的更多信息可在 此处 找到。
