在数字化转型中,选择合适的跨平台开发框架不仅能提高效率,还有助于确保数据安全与合规性。
655
2023-07-30
详解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小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~