上篇文章我们讲到了自定义底部分栏控制器的使用,在开发过程中我们100%会使用到导航,当然Flutter也为我们提供了导航控件,但是自带的往往没有没有那么灵活,所以这个时候就需要我们自定义一个导航,下面就给大家讲解如果绘制一个简单的自定义导航。

我们还是通过代码的方式来讲解

我这里给自定义导航类命名为TitleBar.dart


下面就是自定义导航的实现,具体原理都写在注释 

import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:jianfa/constant/DataBase.dart';
import 'package:jianfa/util/ColorUtils.dart';
import 'package:jianfa/util/callBack/TitleBarCallBack.dart';class TitleBar extends StatefulWidget {String leftTv = "";  // 导航返回左侧文字String titleTv = ""; // 导航标题文字String rightTv = ""; // 导航右侧右侧文字// TitleBarCallBack为左右按钮的点击事件,透过callBack拿到点击事件,进行返回或者其他操作TitleBarCallBack callBack;//自定义导航类的构造方法TitleBar({this.leftTv, this.titleTv, this.rightTv, this.callBack, Key key}): super(key: key);@override_TitleBarState createState() => _TitleBarState();
}class _TitleBarState extends State<TitleBar> {@overrideWidget build(BuildContext context) {return Container(// 设置导航背景色,也可以设置成图片,都可以,大家自己去设定color: ColorUtils.BLUE_NORMAL,/*导航的高度,这里是根据iOS设定的,iOS导航内容是40,然后再加上状态栏的高度,就是整体导航的高度,DataBase.STATUS_BAR_HEIGHT就是导航的高度,刘海屏幕是44,反之20,所以最后高度就是88或者64*/ height: 40 + DataBase.STATUS_BAR_HEIGHT, child: Column(children: <Widget>[Container(// 这里设置距离状态栏的距离margin: new EdgeInsets.only(top: DataBase.STATUS_BAR_HEIGHT),// 这里设定导航内容的高度,height: 40,child: Stack(// Positioned是 层叠布局,具体都如何使用,大家可以在网上查一下,这里不做过多介绍// Row为横向布局children: <Widget>[// 设置 左面按钮样式,图片 + 文件Positioned(child: Container(// 设置距离左边界距离margin: new EdgeInsets.only(left: 15),// 左侧按钮高度height: 40,// 监听左侧按钮点击事件child: Listener(onPointerDown: (e) {widget.callBack.didSelectLeftCallBack();},child: Row(// Row布局排版左侧按钮和文字children: <Widget>[Image.asset("images/ic_back.png",width: 20,height: 20,),Text(widget.leftTv,style: TextStyle(color: Colors.white, fontSize: 18),)],),),),),// 设置导航的titlePositioned(child: Container(alignment: Alignment.center,child: Row(crossAxisAlignment: CrossAxisAlignment.center,mainAxisAlignment: MainAxisAlignment.center,children: <Widget>[Text(widget.titleTv,style: TextStyle(color: Colors.white, fontSize: 17),)],),)),// 设置右侧点击事件Positioned(right: 0,child: Container(alignment: Alignment.center,// 设置距离右侧边界距离margin: new EdgeInsets.only(right: 15),// 设置高度height: 40,// 监听右侧点击事件child: Listener(onPointerDown: (e) {widget.callBack.didSelectRightCallBack();},child: Text(widget.rightTv,style: TextStyle(color: Colors.white, fontSize: 16),),),),),],),),],),);}
}

上面就是简单的自定义导航的实现,但是上面我们说到TitleBarCallBack获取左右两侧的点击事件下面讲解一下TitleBarCallBack的实现。

其实TitleBarCallBack实现很简单就是两个方法

abstract class TitleBarCallBack{// 左侧点击void didSelectLeftCallBack();// 右侧点击void didSelectRightCallBack();
}

那我们如何使用呢

TitleBar(leftTv: "",rightTv: "",titleTv: "忘记密码",callBack: this,),

然后在使用的位置加上TitleBarCallBack下面的代码

class _ForgatPasswordState extends State<ForgatPassword>implements TitleBarCallBack {}

加完这个代码以后,会提示我们实现两个CallBack的方法,我们根据提示option + 回撤,就可以了,到此就实现了Flutter自定义导航。如果导航复杂可以在这个样式上继续扩展

Flutter 自定义导航相关推荐

  1. Flutter 自定义导航、字体大小、颜色等

    导航作为app开发想来都不陌生,在app的每一个页面几乎都离不开导航的影子,所以我们要封装一个自定义导航方便每一个页面的使用,导航一般都是左边返回.中间标题.右面保存等功能,下面就为大家 提供一个导航 ...

  2. flutter制作具有自定义导航栏的渐进式 Web 应用程序

    本文主要介绍具有自定义导航栏的渐进式 Web 应用程序 gitee github 哔哩哔哩 第一节 第二节 第三节 让我们准备我们的 - "Main.dart" 我们将整个页面分成 ...

  3. Flutter 基于AppBar自定义导航栏基类

    Flutter 基于AppBar自定义导航栏基类 效果图 AppBar 详解 代码实现 效果图 AppBar 详解 AppBar({Key key,this.leading, //widget类型,即 ...

  4. flutter 导航组件 AppBar (含顶部选项卡TabBar,抽屉菜单 drawer ,自定义导航图标)

    AppBar 组件的结构 AppBar 组件的代码 AppBar(leading: Icon(Icons.home), // 导航图标title: Text('AppBar Title'), // 页 ...

  5. 【Flutter】Flutter 自定义字体 ( 下载 TTF 字体 | pubspec.yaml 配置字体资源 | 同步资源 | 全局应用字体 | 局部应用字体 )

    文章目录 一.Flutter 自定义字体 1.ttf 字体文件 2.ttf 字体资源配置 3.获取字体 4.全局使用字体 5.局部使用字体 二.完整代码示例 三.相关资源 一.Flutter 自定义字 ...

  6. Flutter - 底部导航详解与案例示范

    Flutter - 底部导航栏解析与示范 作者: jcLee95 邮箱 :291148484@163.com CSDN 主页:https://blog.csdn.net/qq_28550263?spm ...

  7. flutter 自定义绘制_自定义可绘制

    flutter 自定义绘制 I love our new designs! Recently I've been working on user interactions. One of them i ...

  8. 微信小程序 自定义导航栏,只保留右上角胶囊按钮

    微信小程序开发交流qq群   173683895    承接微信小程序开发.扫码加微信. navigationStyle 导航栏样式,仅支持以下值: default 默认样式 custom 自定义导航 ...

  9. 为SharePoint网站创建自定义导航菜单

    相信不少人都希望把SharePoint网站内置的那个顶部导航菜单,换成自己希望的样式.由于SharePoint 2007/2010的网站导航基本上基于标准的ASP.NET SiteMap模型,所以只要 ...

最新文章

  1. python函数对变量的作用遵守原则有哪四条_创建一个包含四个参数的函数
  2. sgi---1 vector
  3. app pay开发遇到的坑
  4. GetLastError函数使用及返回代码对照
  5. 用c语言编译二叉树,C语言实现二叉树的基本操作
  6. Python3.0 新特性
  7. Tricks(三十二)—— 二维数组转换为一维数组
  8. moment获取几小时前_请问怎么把“多少小时前”精确到“多少小时多少分钟前”...
  9. java mainclass_java – 无法加载Main-Class清单属性
  10. t-sql中引号的使用规则 转
  11. win98 支持html5,win98 ghost ghost在WIN98怎么使用
  12. operator重载运算符
  13. 国产框架MindSpore联合山水自然保护中心,寻找、保护「中华水塔」中的宝藏生命
  14. 详解去中心化资产管理协议BlackHoleDAO
  15. 《软件研发效能度量规范》的解读与实践(文末附有下载)
  16. 主机托管的优点有哪些?
  17. 小数据池与文件的操作
  18. 2022四川大学计算机考研复试分数线
  19. pert计算公式期望值_PERT的应用
  20. vue3.0+ts 找不到模块“./XXX.vue”或其相应的类型声明。

热门文章

  1. 解决QQ连接超时问题
  2. 【ROS】ROS入门笔记-Gazebo仿真与实物测试篇
  3. 我的世界服务器增加刷怪率,MC:想要做出高效率的刷怪塔,必须要掌握这个具体的刷怪周期...
  4. 装ubuntu16.04与win10双系统
  5. 滋补——不吃燕窝 就吃花娇娇
  6. 英语知识点整理day20-谚语学习(K字母开头)
  7. 云服务器ip维护,openwrt修改默认ip的方法_网站服务器运行维护,openwrt
  8. 漏斗分析(Funnel Analysis)
  9. xsync集群分发脚本
  10. 现在还有人买Android平板吗,换代也没用我为什么不买安卓平板