詳解Flutter TabLayout 布局用法
Flutter是谷歌的移動UI框架,可以快速在iOS和Android上構(gòu)建高質(zhì)量的原生用戶界面。 Flutter可以與現(xiàn)有的代碼一起工作。在全世界,F(xiàn)lutter正在被越來越多的開發(fā)者和組織使用,并且Flutter是完全免費、開源的。
本文重點給大家介紹Flutter TabLayout 布局用法,具體內(nèi)容如下所示:
先上圖

頂部TabBar
使用 flutter create xxxx 創(chuàng)建一個項目
打開項目文件夾,在 lib 目錄里創(chuàng)建三個 dart 文件,內(nèi)容分別如下
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 文件內(nèi)容,TabLayout布局是個有狀態(tài)的組件,所以創(chuàng)建組件時要繼承 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 對應(yīng)的視圖是在 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
總結(jié)
以上所述是小編給大家介紹的ter TabLayout 布局用法,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
如果你覺得本文對你有幫助,歡迎轉(zhuǎn)載,煩請注明出處,謝謝!
相關(guān)文章
SpringBoot2零基礎(chǔ)到精通之profile功能與自定義starter
SpringBoot是一種整合Spring技術(shù)棧的方式(或者說是框架),同時也是簡化Spring的一種快速開發(fā)的腳手架,本篇讓我們一起學(xué)習profile功能與自定義starter2022-03-03
Spring Boot 中實現(xiàn)跨域的多種方式小結(jié)
Spring Boot提供了多種方式來實現(xiàn)跨域請求,開發(fā)者可以根據(jù)具體需求選擇適合的方法,在配置時,要確保不僅考慮安全性,還要兼顧應(yīng)用的靈活性和性能,本文給大家介紹Spring Boot 中實現(xiàn)跨域的多種方式,感興趣的朋友一起看看吧2024-01-01

