简介
SnackBarAction 来实现并行界面的横向滑动展示
- TabBar,是材料设计中很常用的一种横向标签. 来实现并行界面的横向滑动展示,在Flutter的世界中,TabBar有着相同的作用。通常,我们会在AppBar的底部部分结合TabBarView来使用TabBar;
基本用法
在容器顶部或者底部配置, TabBar组件, 横向切换视口窗口中的内容
TabBar 有以下几项属性
- tabs 一般使用Tab对象,当然也可以是其他的Widget
- controller TabController对象
- isScrollable 是否可滚动
- indicatorColor 指示器颜色
- indicatorWeight 指示器厚度
- indicatorPadding 底部指示器的Padding
- indicator 指示器decoration,例如边框等
- indicatorSize 指示器大小计算方式
- labelColor 选中Tab文字颜色
- labelStyle 选中Tab文字Style
- unselectedLabelColor 未选中Tab中文字颜色
- unselectedLabelStyle 未选中Tab中文字style
TabBarView 有以下几项属性
- children tabBar中对象分别对应的视图窗口内容, children的长度通常与tabs中的tab对象长度相同
- controller TabController对象
实例演示
import 'package:flutter/material.dart';
class TabBarDemo extends StatefulWidget {
const TabBarDemo() : super();
@override
State<StatefulWidget> createState() => _TabBarDemo();
}
/*
* AppBar 默认的实例,有状态
* */
class _TabBarDemo extends State with SingleTickerProviderStateMixin {
ScrollController _scrollViewController;
TabController _tabController;
@override
void initState() {
super.initState();
_scrollViewController = ScrollController();
_tabController = TabController(vsync: this, length: 6);// 和下面的 TabBar.tabs 数量对应
}
@override
void dispose() {
_scrollViewController.dispose();
_tabController.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
// 如果省略了 leading ,但 AppBar 在带有 Drawer 的 Scaffold 中,则会插入一个 button 以打开 Drawer。
// 否则,如果最近的 Navigator 具有任何先前的 router ,则会插入BackButton。
// 这种行为可以通过设置来关闭automaticallyImplyLeading 为false。在这种情况下,空的 leading widget 将导致 middle/title widget 拉伸开始。
return SizedBox(
height: 500,
child: Scaffold(
appBar: AppBar( // 大量配置属性参考 SliverAppBar 示例
title: Text('TabBar'),
leading: Icon(Icons.home),
backgroundColor: Colors.amber[1000],
bottom: TabBar(
isScrollable: true,
controller: _tabController,
tabs: <Widget>[
Tab(text: "Tabs 1"),
Tab(text: "Tabs 2"),
Tab(text: "Tabs 3"),
Tab(text: "Tabs 4"),
Tab(text: "Tabs 5"),
Tab(text: "Tabs 6"),
],
),
),
body: TabBarView(controller: _tabController, children: <Widget>[
Text('TabsView 1'),
Text('TabsView 2'),
Text('TabsView 3'),
Text('TabsView 4'),
Text('TabsView 5'),
Text('TabsView 6'),
]),
)
);
}
}