Flutter实现顶部导航栏功能
作者:明知山_ 时间:2023-03-10 17:13:48
本文实例为大家分享了Flutter实现顶部导航栏的具体代码,供大家参考,具体内容如下
import 'package:flutter/material.dart';
class AppBarDemoPage extends StatelessWidget {
? const AppBarDemoPage({Key key}) : super(key: key);
? @override
? Widget build(BuildContext context) {
? ? return DefaultTabController(
? ? //导航栏的长度
? ? ? length: 4,
? ? ? child: Scaffold(
? ? ? ? appBar: AppBar(
? ? ? ? ? title: Text("AppBarDemoPage"),
? ? ? ? ? backgroundColor: Colors.red,
? ? ? ? ? centerTitle: true,
? ? ? ? ? bottom: TabBar(
? ? ? ? ? ? // isScrollable: true, //可滚动
? ? ? ? ? ? indicatorColor: Colors.blueGrey, //指示器的颜色
? ? ? ? ? ? labelColor: Colors.blueGrey, //选中文字颜色
? ? ? ? ? ? unselectedLabelColor: Colors.white, //为选中文字颜色
? ? ? ? ? ? // indicatorSize: TabBarIndicatorSize.label, //指示器与文字等宽
? ? ? ? ? ? tabs: <Widget>[
? ? ? ? ? ? ? Tab(text: "热门"),
? ? ? ? ? ? ? Tab(text: "推荐"),
? ? ? ? ? ? ? Tab(text: "好友"),
? ? ? ? ? ? ? Tab(text: "动态"),
? ? ? ? ? ? ],
? ? ? ? ? ),
? ? ? ? ),
? ? ? ? body: TabBarView(
? ? ? ? ? children: <Widget>[
? ? ? ? ? ? Container(
? ? ? ? ? ? ? child: Text("hello"),
? ? ? ? ? ? ),
? ? ? ? ? ? ListView(
? ? ? ? ? ? ? children: <Widget>[
? ? ? ? ? ? ? ? ListTile(
? ? ? ? ? ? ? ? ? title: Text("第二个tab"),
? ? ? ? ? ? ? ? )
? ? ? ? ? ? ? ],
? ? ? ? ? ? ),
? ? ? ? ? ? ListView(
? ? ? ? ? ? ? children: <Widget>[
? ? ? ? ? ? ? ? ListTile(
? ? ? ? ? ? ? ? ? title: Text("第三个tab"),
? ? ? ? ? ? ? ? )
? ? ? ? ? ? ? ],
? ? ? ? ? ? ),
? ? ? ? ? ? ListView(
? ? ? ? ? ? ? children: <Widget>[
? ? ? ? ? ? ? ? ListTile(
? ? ? ? ? ? ? ? ? title: Text("第四个tab"),
? ? ? ? ? ? ? ? )
? ? ? ? ? ? ? ],
? ? ? ? ? ? ),
? ? ? ? ? ],
? ? ? ? ),
? ? ? ),
? ? );
? }
}
如果底部导航栏和顶部导航栏同时存在的
在这里只写顶部导航栏的实现,底部的可以参照我之前的文章
tabbar导航栏的实现
import 'package:flutter/material.dart';
class CategoryPage extends StatefulWidget {
? CategoryPage({Key key}) : super(key: key);
? @override
? _CategoryPageState createState() => _CategoryPageState();
}
class _CategoryPageState extends State<CategoryPage> {
? @override
? Widget build(BuildContext context) {
? ? return DefaultTabController(
? ? ? length: 4,
? ? ? child: Scaffold(
? ? ? ? appBar: AppBar(
? ? ? ? ? title: Row(
? ? ? ? ? ? children: <Widget>[
? ? ? ? ? ? ? Expanded(
? ? ? ? ? ? ? ? child: TabBar(
? ? ? ? ? ? ? ? ? tabs: <Widget>[
? ? ? ? ? ? ? ? ? ? Tab(text: "精选"),
? ? ? ? ? ? ? ? ? ? Tab(text: "电影"),
? ? ? ? ? ? ? ? ? ? Tab(text: "动漫"),
? ? ? ? ? ? ? ? ? ? Tab(text: "NBA"),
? ? ? ? ? ? ? ? ? ],
? ? ? ? ? ? ? ? ),
? ? ? ? ? ? ? )
? ? ? ? ? ? ],
? ? ? ? ? ),
? ? ? ? ),
? ? ? ? body: TabBarView(
? ? ? ? ? children: <Widget>[
? ? ? ? ? ? ListView(
? ? ? ? ? ? ? children: <Widget>[
? ? ? ? ? ? ? ? ListTile(
? ? ? ? ? ? ? ? ? title: Text("第一个tab"),
? ? ? ? ? ? ? ? )
? ? ? ? ? ? ? ],
? ? ? ? ? ? ),
? ? ? ? ? ? ListView(
? ? ? ? ? ? ? children: <Widget>[
? ? ? ? ? ? ? ? ListTile(
? ? ? ? ? ? ? ? ? title: Text("第二个tab"),
? ? ? ? ? ? ? ? )
? ? ? ? ? ? ? ],
? ? ? ? ? ? ),
? ? ? ? ? ? ListView(
? ? ? ? ? ? ? children: <Widget>[
? ? ? ? ? ? ? ? ListTile(
? ? ? ? ? ? ? ? ? title: Text("第三个tab"),
? ? ? ? ? ? ? ? )
? ? ? ? ? ? ? ],
? ? ? ? ? ? ),
? ? ? ? ? ? ListView(
? ? ? ? ? ? ? children: <Widget>[
? ? ? ? ? ? ? ? ListTile(
? ? ? ? ? ? ? ? ? title: Text("第四个tab"),
? ? ? ? ? ? ? ? )
? ? ? ? ? ? ? ],
? ? ? ? ? ? ),
? ? ? ? ? ],
? ? ? ? ),
? ? ? ),
? ? );
? }
}
这么写是对导航栏点击做的监听,实现效果一样
import 'package:flutter/material.dart';
class NavBarPage extends StatefulWidget {
? NavBarPage({Key key}) : super(key: key);
? @override
? _NavBarPageState createState() => _NavBarPageState();
}
class _NavBarPageState extends State<NavBarPage>
? ? with SingleTickerProviderStateMixin {
? TabController _tabController;
? @override
? void initState() {
? ? super.initState(); //length为导航栏的个数
? ? _tabController = new TabController(vsync: this, length: 2);
? ? _tabController.addListener(() {
? ? ? print(_tabController.index);//打印点击的索引
? ? });
? }
? @override
? Widget build(BuildContext context) {
? ? return Scaffold(
? ? ? ? appBar: AppBar(
? ? ? ? ? title: Text("NavBar"),
? ? ? ? ? bottom: TabBar(
? ? ? ? ? ? controller: this._tabController,
? ? ? ? ? ? tabs: <Widget>[
? ? ? ? ? ? ? Tab(text: "热销"),
? ? ? ? ? ? ? Tab(text: "推荐"),
? ? ? ? ? ? ],
? ? ? ? ? ),
? ? ? ? ),
? ? ? ? body: TabBarView(
? ? ? ? ? controller: this._tabController,
? ? ? ? ? children: <Widget>[
? ? ? ? ? ? Center(child: Text("热销")),
? ? ? ? ? ? Center(child: Text("推荐"))
? ? ? ? ? ],
? ? ? ? ));
? }
}
来源:https://blog.csdn.net/AK852369/article/details/104921854
标签:Flutter,导航栏
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
使用idea解决maven依赖冲突的问题
2021-10-16 12:32:51
![](https://img.aspxhome.com/file/2023/0/71160_0s.png)
Android实现TCP断点上传 后台C#服务接收
2023-08-25 22:24:00
MyBatis 如何配置多个别名 typeAliasesPackage
2021-11-16 06:35:54
Mybatis Log Plugin的使用方式
2021-08-27 19:02:31
![](https://img.aspxhome.com/file/2023/8/61828_0s.jpg)
Android实现上拉加载更多以及下拉刷新功能(ListView)
2022-03-02 15:50:41
![](https://img.aspxhome.com/file/2023/0/108320_0s.png)
Java泛型常见面试题(面试必问)
2021-11-20 20:51:55
java中删除 数组中的指定元素方法
2023-02-02 12:45:59
Spring @Transactional注解失效解决方案
2022-10-25 05:30:30
unity 实现摄像机绕某点旋转一周
2021-06-11 16:48:57
Javaweb开发环境Myeclipse6.5 JDK1.6 Tomcat6.0 SVN1.8配置教程
2023-11-15 21:47:05
![](https://img.aspxhome.com/file/2023/1/73091_0s.png)
Android SQLite数据库操作代码类分享
2022-03-03 06:43:25
Java设计模式之迭代模式(Iterator模式)介绍
2022-07-24 16:03:29
SpringBoot添加自定义拦截器的实现代码
2023-11-26 13:30:54
C++实现扫雷小游戏
2022-07-27 22:59:39
Spring中的注解之@Override和@Autowired
2022-08-07 19:56:47
![](https://img.aspxhome.com/file/2023/4/125564_0s.png)
java连接sql server 2008数据库代码
2023-05-27 10:40:01
java语法糖之jdk迭代的新特性汇总
2022-07-09 10:05:19
springboot实现FastJson解析json数据的方法
2023-11-27 22:12:48
Java信号量Semaphore原理及代码实例
2021-10-02 21:55:08
设计模式之责任链模式_动力节点Java学院整理
2022-03-08 11:24:14
![](https://img.aspxhome.com/file/2023/4/81924_0s.jpg)