Flutter进阶质感设计之标签栏

所属分类: 软件编程 / Android 阅读数: 42
收藏 0 赞 0 分享

在质感设计的控件中,有一个显示水平的一行选项卡,通常作为AppBar控件的一部分创建,并与TabBarView控件结合使用。

import 'package:flutter/material.dart';
/*
 * 枚举类,标签演示样式
 * 图标和文本
 * 仅图标
 * 仅文本
 */
enum TabsDemoStyle {
 iconsAndText,
 iconsOnly,
 textOnly
}
/*
 * 页面类
 * 图标
 * 文本
 */
class _Page {
 _Page({
 this.icon,
 this.text,
 });
 final IconData icon;
 final String text;
}
// 存储所有页面的列表
final List<_Page> _allPages = <_Page>[
 new _Page(icon: Icons.event, text: 'EVENT'),
 new _Page(icon: Icons.home, text: 'HOME'),
 new _Page(icon: Icons.android, text: 'ANDROID'),
 new _Page(icon: Icons.alarm, text: 'ALARM'),
 new _Page(icon: Icons.face, text: 'FACE'),
 new _Page(icon: Icons.language, text: 'LANGUAGE'),
];
class ScrollableTabsDemo extends StatefulWidget {
 @override
 _ScrollableTabsDemoState createState() => new _ScrollableTabsDemoState();
}
// 继承SingleTickerProviderStateMixin,提供单个Ticker(每个动画帧调用它的回调一次)
class _ScrollableTabsDemoState extends State<ScrollableTabsDemo> with SingleTickerProviderStateMixin {
 /*
 * 在TabBar和TabBarView之间的坐标选项卡选择
 * TabBar:质感设计控件,显示水平的一行选项卡
 * TabBarView:可分布列表,显示与当前所选标签对应的控件
 */
 TabController _controller;
 TabsDemoStyle _demoStyle = TabsDemoStyle.iconsAndText;
 @override
 void initState() {
 super.initState();
 /*
 * 创建一个对象,用于管理TabBar和TabBarView所需的状态
 * length:选项卡的总数,存储所有页面的列表中的元素个数
 */
 _controller = new TabController(vsync: this, length: _allPages.length);
 }
 // 释放对象使用的资源
 @override
 void dispose() {
 super.dispose();
 _controller.dispose();
 }
 void changeDemoStyle(TabsDemoStyle style) {
 setState((){
 _demoStyle = style;
 });
 }
 @override
 Widget build(BuildContext context) {
 // 获取当前主题的控件前景色
 final Color iconColor = Theme.of(context).accentColor;
 return new Scaffold(
 appBar: new AppBar(
 title: new Text('可滚动的标签页'),
 actions: <Widget>[
  new PopupMenuButton<TabsDemoStyle>(
  onSelected: changeDemoStyle,
  itemBuilder: (BuildContext context) => <PopupMenuItem<TabsDemoStyle>>[
  new PopupMenuItem<TabsDemoStyle>(
  value: TabsDemoStyle.iconsAndText,
  child: new Text('图标和文本')
  ),
  new PopupMenuItem<TabsDemoStyle>(
  value: TabsDemoStyle.iconsOnly,
  child: new Text('仅图标')
  ),
  new PopupMenuItem<TabsDemoStyle>(
  value: TabsDemoStyle.textOnly,
  child: new Text('仅文本')
  )
  ]
  ),
 ],
 bottom: new TabBar(
  // 控件的选择和动画状态
  controller: _controller,
  // 标签栏是否可以水平滚动
  isScrollable: true,
  // 标签控件的列表
  tabs: _allPages.map((_Page page){
  switch(_demoStyle) {
  case TabsDemoStyle.iconsAndText:
  return new Tab(text: page.text, icon: new Icon(page.icon));
  case TabsDemoStyle.iconsOnly:
  return new Tab(icon: new Icon(page.icon));
  case TabsDemoStyle.textOnly:
  return new Tab(text: page.text);
  }
  }).toList(),
 ),
 ),
 body: new TabBarView(
 // 控件的选择和动画状态
 controller: _controller,
 // 每个标签一个控件
 children: _allPages.map((_Page page) {
  return new Container(
  key: new ObjectKey(page.icon),
  padding: const EdgeInsets.all(12.0),
  // 质感设计卡片
  child:new Card(
  child: new Center(
  child: new Icon(
   page.icon,
   color: iconColor,
   size: 128.0,
  )
  )
  )
  );
 }).toList(),
 )
 );
 }
}
void main() {
 runApp(new MaterialApp(
 title: 'Flutter教程',
 home: new ScrollableTabsDemo(),
 ));
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

更多精彩内容其他人还在看

使用ViewPager实现android软件使用向导功能实现步骤

现在的大部分android软件,都是使用说明,就是第一次使用该软件时,会出现向导,可以左右滑动,然后就进入应用的主界面了,下面我们就实现这个功能
收藏 0 赞 0 分享

android在异步任务中关闭Cursor的代码方法

android在异步任务中如何关闭Cursor?在我们开发应用的时候,很多时候会遇到这种问题,下面我们就看看代码如何实现
收藏 0 赞 0 分享

Android自定义桌面功能代码实现

android自定义桌面其实很简单,看一个例子就明白了
收藏 0 赞 0 分享

android将图片转换存到数据库再从数据库读取转换成图片实现代码

有时候我们想把图片存入到数据库中,尽管这不是一种明智的选择,但有时候还是不得以会用到,下面说说将图片转换成byte[]数组存入到数据库中去,并从数据库中取出来转换成图像显示出来
收藏 0 赞 0 分享

TextView显示系统时间(时钟功能带秒针变化

用System.currentTimeMillis()可以获取系统当前的时间,我们可以开启一个线程,然后通过handler发消息,来实时的更新TextView上显示的系统时间,可以做一个时钟的功能
收藏 0 赞 0 分享

Android用ListView显示SDCard文件列表的小例子

本文简单实现了用ListView显示SDCard文件列表,目录的回退等功能暂不讨论,获取文件列表,files即为所选择目录下的所有文件列表
收藏 0 赞 0 分享

Android拦截外拨电话程序示例

这篇文章主要介绍了Android拦截外拨电话的示例,大家参考使用吧
收藏 0 赞 0 分享

通过Html网页调用本地安卓(android)app程序代码

如何使用html网页和本地app进行传递数据呢?经过研究,发现还是有方法的,总结了一下,大致有一下几种方式
收藏 0 赞 0 分享

android Textview文字监控(Textview使用方法)

以手机号充值为例,当用户输入最后一位数时候,进行汇率的变换,本文就实现类似这样的功能
收藏 0 赞 0 分享

Android ListView长按弹出菜单二种实现方式示例

这篇文章主要介绍了Android ListView长按弹出菜单的方法,大家参考实现
收藏 0 赞 0 分享
查看更多