详解Flutter TabLayout 布局用法

Flutter是谷歌的移动UI框架,可以快速在iOS和Android上构建高质量的原生用户界面。 Flutter可以与现有的代码一起工作。在全世界,Flutter正在被越来越多的开发者和组织使用,并且Flutter是完全免费、开源的。

本文重点给大家介绍Flutter TabLayout 布局用法,具体内容如下所示:

先上图

顶部TabBar

使用 flutter create xxxx 创建一个项目

打开项目文件夹,在 lib 目录里创建三个 dart 文件,内容分别如下

First.dart

import "package:flutter/material.dart";
class First extends StatelessWidget {
 @override
 Widget build(BuildContext context) {
 return Material(
  color: Colors.green,
 );
 }
}

Second.dart

import "package:flutter/material.dart";

class Second extends StatelessWidget {
 @override
 Widget build(BuildContext context) {
 return Material(
  color: Colors.red,
 );
 }
}

Third.dart

import "package:flutter/material.dart";
class Third extends StatelessWidget {
 @override
 Widget build(BuildContext context) {
 return Material(
  color: Colors.yellow,
 );
 }
}

修改 main.dart 文件内容,TabLayout布局是个有状态的组件,所以创建组件时要继承 StatefulWidget 类

动图中的 TabBar 是在 Scaffold 中的 appBar 中定义的,也就是说 tabbar 是 appBar的一部分

appBar: AppBar(
 title: Text(widget.title),
 bottom: TabBar(
 controller: tabController,
 tabs: <Tab>[
  new Tab(text: "问答"),
  new Tab(text: "分享"),
  new Tab(text: "博客"),
 ],
 ),
),

每个 tabbar 对应的视图是在 body 里定义的,按照顺序初始化好即可

// 引入 dart 文件
import 'First.dart' as first;
import 'Second.dart' as second;
import 'Third.dart' as third;
body: TabBarView(controller: tabController, children: <Widget>[
 new first.First(),
 new second.Second(),
 new third.Third(),
]),

完整代码:

import 'package:flutter/material.dart';

import 'First.dart' as first;
import 'Second.dart' as second;
import 'Third.dart' as third;

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',
  theme: ThemeData(
  primarySwatch: Colors.blue,
  ),
  home: MyHomePage(title: 'TabLayout Demo'),
 );
 }
}

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

 final String title;

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

class _MyHomePageState extends State<MyHomePage>
 with SingleTickerProviderStateMixin {
 TabController tabController;

 @override
 void initState() {
 super.initState();

 tabController = new TabController(length: 3, vsync: this);
 }

 @override
 void dispose() {
 super.dispose();
 tabController.dispose();
 }

 @override
 Widget build(BuildContext context) {
 return Scaffold(
  appBar: AppBar(
  title: Text(widget.title),
  bottom: TabBar(
   controller: tabController,
   tabs: <Tab>[
   new Tab(text: "问答"),
   new Tab(text: "分享"),
   new Tab(text: "博客"),
   ],
  ),
  ),
  body: TabBarView(controller: tabController, children: <Widget>[
  new first.First(),
  new second.Second(),
  new third.Third(),
  ]),
 );
 }
}

底部TabBar

上面定义的是顶部的tabbar,很多app的布局都是底部有见个tabbar,其实底部的定义方法就是将 appBar 属性中的 bottom 给注释掉,然后在跟 appBar 同级的位置定义一个 bottomNavigationBar 属性,其 child 就是 TabBar 组件,tabbar的视图跟上面定义方法是一样的,代码如下

Widget build(BuildContext context) {
 return Scaffold(
 appBar: AppBar(
  title: Text(widget.title),
//  bottom: TabBar(
//   controller: tabController,
//   tabs: <Tab>[
//   new Tab(text: "问答"),
//   new Tab(text: "分享"),
//   new Tab(text: "博客"),
//   ],
//  ),
 ),
 bottomNavigationBar: new Material(
  color: Colors.blue,
  child: TabBar(
  controller: tabController,
  indicatorColor: Colors.white,
  tabs: <Tab>[
   new Tab(text: "问答"),
   new Tab(text: "分享"),
   new Tab(text: "博客"),
  ],
  ),
 ),
 body: TabBarView(controller: tabController, children: <Widget>[
  new first.First(),
  new second.Second(),
  new third.Third(),
 ]),
 );
}

这样的布局长下面这个样

参考

https://www.youtube.com/watch?v=3N27mjoBK2k

总结

以上所述是小编给大家介绍的ter TabLayout 布局用法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对我们网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

(0)

相关推荐

  • Android中TabLayout+ViewPager实现tab和页面联动效果

    TabLayout+ViewPager实现tab和页面联动效果 xml中: <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" an

  • Android使用TabLayout+Fragment实现顶部选项卡

    先看效果图: 使用Tablayout,首先需要在项目中加入Design包 dependencies { compile 'com.android.support:design:24.1.1' } 在activity_main.xml布局文件中 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/

  • TabLayout使用方法详解

    TabLayout是design库提供的控件,可以方便的使用指示器,功能类似ViewPagerIndicator. 使用非常方便,Android Studio只需要在gradle中引入即可使用 . compile 'com.android.support:design:23.3.0' TabLayout即可以单独使用,也可以配合ViewPager来使用. 先来看看单独使用的Demo,实现如下图的效果: 代码如下: package blog.csdn.net.mchenys.tablayoudem

  • Android中修改TabLayout底部导航条Indicator长短的方法

    前言 对于Tablayout相信大家都不陌生,在开发中使用的应该很频繁了,但是底部导航条长短是固定死的,需要自己来改动长短,找了半天没找着方法,看了下官方建议,可以通过映射来修改自己想要的长短,其实也就几行代码的问题. 看代码: public static void setIndicator(Context context, TabLayout tabs, int leftDip, int rightDip) { Class<?> tabLayout = tabs.getClass(); Fi

  • Flutter常用的布局和事件示例详解

    Flutter 项目中常用的布局详情,及封装和使用,快速开发项目. 以及手势事件和滚动事件的使用 Scaffold 导航栏的实现,有些路由页可能会有抽屉菜单(Drawer)以及底部Tab导航菜单等 const Scaffold({ Key key, this.appBar,//标题栏 this.body,//内容 this.floatingActionButton,//悬浮按钮 this.persistentFooterButtons,//底部持久化现实按钮 this.drawer,//侧滑菜单

  • Flutter布局模型之层叠定位

    Stack即层叠布局控件,能够将子控件层叠排列. Stack控件的每一个子控件都是定位或不定位,定位的子控件是被Positioned控件包裹的.Stack控件本身包含所有不定位的子控件,其根据alignment定位(默认为左上角).然后根据定位的子控件的top.right.bottom和left属性将它们放置在Stack控件上. import 'package:flutter/material.dart'; class LayoutDemo extends StatelessWidget { @

  • Flutter学习之构建、布局及绘制三部曲

    前言 学习Fullter也有些时间了,写过不少demo,对一些常用的widget使用也比较熟练,但是总觉得对Flutter的框架没有一个大致的了解,碰到有些细节的地方又没有文档可以查询,例如在写UI时总不知道为什么container添加了child就变小了:widget中key的作用,虽然官方有解释但是凭空来讲的话有点难理解.所以觉得深入一点的了解Flutter框架还是很有必要的. 构建 初次构建 flutter的入口main方法直接调用了runApp(Widget app)方法,app参数就是

  • 详解Flutter TabLayout 布局用法

    Flutter是谷歌的移动UI框架,可以快速在iOS和Android上构建高质量的原生用户界面. Flutter可以与现有的代码一起工作.在全世界,Flutter正在被越来越多的开发者和组织使用,并且Flutter是完全免费.开源的. 本文重点给大家介绍Flutter TabLayout 布局用法,具体内容如下所示: 先上图 顶部TabBar 使用 flutter create xxxx 创建一个项目 打开项目文件夹,在 lib 目录里创建三个 dart 文件,内容分别如下 First.dart

  • 详解Flutter混排瀑布流解决方案

    背景 流式布局,这是一种当前无论是前端,还是Native都比较流行的一种页面布局.特别是对于商品这样的Feeds流,无论是淘宝,京东,美团,还是闲鱼.都基本上以多列瀑布流进行呈现,容器列数固定,然后每个卡片高度不一,形成参差不齐的多栏布局. 对于Native来说,无论是iOS还是Android,CollectionView和RecyclerView都能满足我们的绝大部分场景了.不过目前闲鱼很多业务场景都是在Flutter上进行实现的,当时Flutter官方只提供了ListView和GridVie

  • 详解Flutter Widget

    目录 概述: Widget的本质: 分类: Widget StatelessWidget StatefulWidget State ParentDataWidget RenderObjectWidget 小结 概述: 所有的一切都可以被称为widget 在开发 Flutter 应用过程中,接触最多的无疑就是Widget,是『描述』 Flutter UI 的基本单元,通过Widget可以做到: 描述 UI 的层级结构 (通过Widget嵌套): 定制 UI 的具体样式 (如:font.color等

  • 详解Flutter中Dart集合使用教程

    目录 前言 优先使用集合的特有语法 不要使用.length 属性判断集合是不是为空 避免使用 forEach 迭代元素 不要使用 List.from(),除非你想要更改结果的类型 使用 whereType 过滤类型 避免使用 cast() 做强制转换 总结 前言 集合是应用程序中最为常见的数据结构,Dart 一共支持如下四种集合,其中核心的 List, Map 和 Set 在基础框架中,而 Queue 在 dart:collection 库定义. 列表:也就是 List类,可动态增长的数组: k

  • 详解Flutter如何完全自定义TabBar

    目录 前言 实现过程 完整代码 总结 前言 在App中TabBar形式交互是非常常见的,但是系统提供的的样式大多数又不能满足我们产品和UI的想法,这篇就记录下在Flutter中我在实现自定义TabBar的一个思路和过程,希望对你也有所帮助~ 先看下我最终的效果图: 实现过程 首先我们先看下TabBar的构造方法: const TabBar({ Key? key, required this.tabs,// tab组件列表 this.controller,// tabBar控制器 this.isS

  • 详解Flutter中数据传递的方式

    目录 1.构造方法传递 2.InheritedWidget 3.Notification 4.Stream & event_bus 在Flutter中,常见的数据传递一共有以下几种: 1.构造方法传递 Flutter的构造方法具备着dart语言的特点,参数具备可选状态,通过构造方法传递数据,可以很方便的将任意数据进行传递,平时开发中,A跳转B页面最常用的方法就是通过构造方法进行传递.比如我们最常见的Key就是通过构造一级一级向下传递的. 优点: 相邻页面之间传递数据非常方便,你不需要进行任何额外

  • 详解flutter中常用的container layout实例

    目录 简介 Container的使用 旋转Container Container中的BoxConstraints 总结 简介 在上一篇文章中,我们列举了flutter中的所有layout类,并且详细介绍了两个非常常用的layout:Row和Column. 掌握了上面两个基本的layout还是不够的,如果需要应付日常的layout使用,我们还需要掌握多一些layout组件.今天我们会介绍一个功能强大的layout:Container layout. Container的使用 Container是一

  • linux 详解useradd 命令基本用法

    linux 详解useradd 命令基本用法 概要: 在 Linux 中 useradd 是个很基本的命令,但是使用起来却很不直观.以至于在 Ubuntu 中居然添加了一个 adduser 命令来简化添加用户的操作.本文主要描述笔者在学习使用 useradd 命令时的一些测试结果. 说明:本文中的所有试验都是在 Ubuntu14.04 上完成. 功能 在Linux中 useradd 命令用来创建或更新用户信息. useradd 命令属于比较难用的命令 (low level utility for

  • 详解Python3 pandas.merge用法

    摘要 数据分析与建模的时候大部分时间在数据准备上,包括对数据的加载.清理.转换以及重塑.pandas提供了一组高级的.灵活的.高效的核心函数,能够轻松的将数据规整化.这节主要对pandas合并数据集的merge函数进行详解.(用过SQL或其他关系型数据库的可能会对这个方法比较熟悉.)码字不易,喜欢请点赞!!! 1.merge函数的参数一览表 2.创建两个DataFrame 3.pd.merge()方法设置连接字段. 默认参数how是inner内连接,并且会按照相同的字段key进行合并,即等价于o

  • 详解Sed命令的用法与正则表达式元字符

    sed命令用法 sed是一种流编辑器,它是文本处理中非常有用的工具,能够完美的配合正则表达式使用,功能不同凡响.处理时,把当前处理的行存储在临时缓冲区中,称为『模式空间』(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕.接着处理下一行,这样不断重复,直到文件末尾.文件内容并没有改变,除非你使用重定向存储输出.sed主要用来自动编辑一个或多个文件,简化对文件的反复操作,编写转换程序等. 1.简介 sed是非交互式的编辑器.它不会修改文件,除非使

随机推荐