Flutter进阶质感设计之标签栏

 更新时间:2021年10月11日 16:49:39   作者:何小有  
这篇文章主要为大家详细介绍了Flutter进阶质感设计之标签栏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

在质感设计的控件中,有一个显示水平的一行选项卡,通常作为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(),
 ));
}

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

相关文章

  • Android实现文件解压带进度条功能

    Android实现文件解压带进度条功能

    本文通过实例代码给大家介绍了android实现文件解压带进度条效果,代码简单易懂,非常不错,具有参考借鉴价值,需要的朋友参考下吧
    2017-08-08
  • Android 进程间通信AIDL使用详解

    Android 进程间通信AIDL使用详解

    本篇文章主要介绍了Android 进程间通信AIDL使用详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-08-08
  • Android的webview支持HTML5的离线应用功能详细配置

    Android的webview支持HTML5的离线应用功能详细配置

    HTML5的离线应用功能可以使得WebApp即使在网络断开的情况下仍能正常使用这是个非常有用的功能,但如何使Webivew支持HTML5离线应用功能呢,需要的朋友可以参考下
    2012-12-12
  • Android Theme以及解决启动黑屏的方法详解

    Android Theme以及解决启动黑屏的方法详解

    这篇文章主要给大家介绍了关于Android Theme以及解决启动黑屏的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-08-08
  • Compose for Desktop 鼠标事件示例demo

    Compose for Desktop 鼠标事件示例demo

    这篇文章主要为大家介绍了Compose for Desktop 鼠标事件示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-03-03
  • 详谈Android从文件读取图像显示的效率问题

    详谈Android从文件读取图像显示的效率问题

    下面小编就为大家带来一篇详谈Android从文件读取图像显示的效率问题。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-03-03
  • 完美解决Jpush[获取sdk版本失败!]的问题

    完美解决Jpush[获取sdk版本失败!]的问题

    下面小编就为大家带来一篇完美解决Jpush[获取sdk版本失败!]的问题的问题。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-06-06
  • Android使用addView动态添加组件的方法

    Android使用addView动态添加组件的方法

    这篇文章主要为大家详细介绍了Android使用addView动态添加组件的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-09-09
  • listview改变字体大小实例讲解

    listview改变字体大小实例讲解

    点击字体,字体变大在本教程中将使用listview实现,不会不懂的朋友可以参考下哈,希望对你有所帮助
    2013-05-05
  • Android常用的图片加载库

    Android常用的图片加载库

    本文主要介绍了Android常用的图片加载库的相关资料。具有很好的参考价值。下面跟着小编一起来看下吧
    2017-04-04

最新评论