详解Flutter TabLayout 布局用法

网友投稿 293 2023-01-01


详解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: [

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: [

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

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) {

rkiRzQkZsAEeturn Scaffold(

appBar: AppBar(

title: Text(widget.title),

bottom: TabBar(

controller: tabController,

tabs: [

new Tab(text: "问答"),

new Tab(text: "分享"),

new Tab(text: "博客"),

],

),

),

body: TabBarView(controller: tabController, children: [

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(

// controhttp://ller: tabController,

// tabs: [

// new Tab(text: "问答"),

// new Tab(text: "分享"),

// new Tab(text: "博客"),

// ],

// ),

),

bottomNavigationBar: new Material(

color: Colors.blue,

child: TabBar(

controller: tabController,

indicatorColor: Colors.white,

tabs: [

new Tab(text: "问答"),

new Tab(text: "分享"),

new Tab(text: "博客"),

],

),

),

body: TabBarView(controller: tabController, children: [

new first.First(),

new second.Second(),

new third.Third(),

]),

);

}

这样的布局长下面这个样

参考

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

总结


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:微服务网关限流算法(网关限流实现)
下一篇:接口测试工具和平台(接口测试工具在线)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~