Flutter实现顶部导航栏功能

作者:明知山_ 时间:2023-03-10 17:13:48 

本文实例为大家分享了Flutter实现顶部导航栏的具体代码,供大家参考,具体内容如下

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"),
? ? ? ? ? ? ? ? )
? ? ? ? ? ? ? ],
? ? ? ? ? ? ),
? ? ? ? ? ],
? ? ? ? ),
? ? ? ),
? ? );
? }
}

如果底部导航栏和顶部导航栏同时存在的

Flutter实现顶部导航栏功能

在这里只写顶部导航栏的实现,底部的可以参照我之前的文章

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,导航栏
0
投稿

猜你喜欢

  • 使用idea解决maven依赖冲突的问题

    2021-10-16 12:32:51
  • 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
  • Android实现上拉加载更多以及下拉刷新功能(ListView)

    2022-03-02 15:50:41
  • 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
  • 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
  • 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
  • asp之家 软件编程 m.aspxhome.com