为什么80%的码农都做不了架构师?>>>   

自带AppBar 有限制

到app_bar.dart 中将  AppBar 和 _AppBarState 类复制到自定义的wAppBar 中

删除多余的Widget 保留样式参数

import 'package:flutter/material.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter/rendering.dart';
import 'package:flutter/services.dart';
import 'package:flutter/widgets.dart';//kToolbarHeight  状态栏的高度 包括刘海
class _ToolbarContainerLayout extends SingleChildLayoutDelegate {const _ToolbarContainerLayout();@overrideBoxConstraints getConstraintsForChild(BoxConstraints constraints) {return constraints.tighten(height: kToolbarHeight);}@overrideSize getSize(BoxConstraints constraints) {return Size(constraints.maxWidth, kToolbarHeight);}@overrideOffset getPositionForChild(Size size, Size childSize) {return Offset(0.0, size.height - childSize.height);}@overridebool shouldRelayout(_ToolbarContainerLayout oldDelegate) => false;
}
class WAppBar extends StatefulWidget implements PreferredSizeWidget {WAppBar({Key key,this.child, //自定义 widget  删除其他多余的wigdetthis.bottom,this.elevation,this.shape,this.backgroundColor,this.brightness,this.iconTheme,this.actionsIconTheme,this.textTheme,this.primary = true,this.centerTitle,this.titleSpacing = NavigationToolbar.kMiddleSpacing,this.toolbarOpacity = 1.0,this.bottomOpacity = 1.0,}) : assert(elevation == null || elevation >= 0.0),assert(primary != null),assert(titleSpacing != null),assert(toolbarOpacity != null),assert(bottomOpacity != null),preferredSize = Size.fromHeight(kToolbarHeight + (bottom?.preferredSize?.height ?? 0.0)),super(key: key);final Widget child;final PreferredSizeWidget bottom;final double elevation;final ShapeBorder shape;final Color backgroundColor;final Brightness brightness;final IconThemeData iconTheme;final IconThemeData actionsIconTheme;final TextTheme textTheme;final bool primary;final bool centerTitle;final double titleSpacing;final double toolbarOpacity;final double bottomOpacity;@overridefinal Size preferredSize;@override_WAppBarState createState() => _WAppBarState();
}class _WAppBarState extends State<WAppBar> {static const double _defaultElevation = 0.0;@overrideWidget build(BuildContext context) {assert(!widget.primary || debugCheckHasMediaQuery(context));assert(debugCheckHasMaterialLocalizations(context));final ThemeData themeData = Theme.of(context);final AppBarTheme appBarTheme = AppBarTheme.of(context);final ScaffoldState scaffold = Scaffold.of(context, nullOk: true);final ModalRoute<dynamic> parentRoute = ModalRoute.of(context);IconThemeData overallIconTheme = widget.iconTheme?? appBarTheme.iconTheme?? themeData.primaryIconTheme;IconThemeData actionsIconTheme = widget.actionsIconTheme?? appBarTheme.actionsIconTheme?? overallIconTheme;TextStyle centerStyle = widget.textTheme?.title?? appBarTheme.textTheme?.title?? themeData.primaryTextTheme.title;TextStyle sideStyle = widget.textTheme?.body1?? appBarTheme.textTheme?.body1?? themeData.primaryTextTheme.body1;print(sideStyle);if (widget.toolbarOpacity != 1.0) {final double opacity = const Interval(0.25, 1.0, curve: Curves.fastOutSlowIn).transform(widget.toolbarOpacity);if (centerStyle?.color != null)centerStyle = centerStyle.copyWith(color: centerStyle.color.withOpacity(opacity));if (sideStyle?.color != null)sideStyle = sideStyle.copyWith(color: sideStyle.color.withOpacity(opacity));overallIconTheme = overallIconTheme.copyWith(opacity: opacity * (overallIconTheme.opacity ?? 1.0));actionsIconTheme = actionsIconTheme.copyWith(opacity: opacity * (actionsIconTheme.opacity ?? 1.0));}Widget appBar = ClipRect(child: CustomSingleChildLayout(delegate: const _ToolbarContainerLayout(),child: IconTheme.merge(data: overallIconTheme,child: DefaultTextStyle(style: sideStyle,
//            child: toolbar,child: widget.child,),),),);if (widget.bottom != null) {appBar = Column(mainAxisAlignment: MainAxisAlignment.spaceBetween,children: <Widget>[Flexible(child: ConstrainedBox(constraints: const BoxConstraints(maxHeight: kToolbarHeight),child: appBar,),),widget.bottomOpacity == 1.0 ? widget.bottom : Opacity(opacity: const Interval(0.25, 1.0, curve: Curves.fastOutSlowIn).transform(widget.bottomOpacity),child: widget.bottom,),],);}// The padding applies to the toolbar and tabbar, not the flexible space.if (widget.primary) {appBar = SafeArea(top: true,child: appBar,);}appBar = Align(alignment: Alignment.topCenter,child: appBar,);final Brightness brightness = widget.brightness?? appBarTheme.brightness?? themeData.primaryColorBrightness;final SystemUiOverlayStyle overlayStyle = brightness == Brightness.dark? SystemUiOverlayStyle.light: SystemUiOverlayStyle.dark;return Semantics(container: true,child: AnnotatedRegion<SystemUiOverlayStyle>(value: overlayStyle,child: Material(color: widget.backgroundColor?? appBarTheme.color?? themeData.primaryColor,elevation: widget.elevation?? appBarTheme.elevation?? _defaultElevation,shape: widget.shape,child: Semantics(explicitChildNodes: true,child: appBar,),),),);}
}

调用 自定义wAppBar

appBar: WAppBar(child: new Container(child: new Align(child: Text("我是大标题",style: TextStyle(fontSize: 30.0),),),),
),

转载于:https://my.oschina.net/woddp/blog/3029048

flutter 自定义 AppBar相关推荐

  1. flutter自定义appbar

    场景描述: 因为写很多页面,每个顶部都搞一个返回键.分享,中间标题这种东东,弄的比较繁琐,索性就把这个appbar给单独抽离出来,重新定义成一个widget这个内容. 效果图大致是这样子的: 源码: ...

  2. Flutter——自定义AppBar

    状态栏处理:https://blog.csdn.net/JustBeauty/article/details/82110743

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

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

  4. Flutter 中的自定义 AppBar

    在 Flutter 中,您可以通过定义一个扩展内置AppBar类的新类来使用自定义 AppBar.下面是如何在 Flutter 中创建自定义 AppBar 的示例: import 'package:f ...

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

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

  6. Flutter自定义背景色渐变 按钮 组件

    这是笔者写的第一个 Flutter 自定义组件,在这里和大家分享一下,可能稍微有点粗糙,就当学习使用. 首先我们先来看一下效果图: 代码: import 'package:flutter/materi ...

  7. Flutter 自定义路由动画案例

    前言: 各位同学大家好,最近国庆放假期间因为没有回老家过节(没买到车票啊)就写了一些flutter小案例就分享给大家 (Flutter 自定义路由动画案例),那么废话不多说我们正式开始 准备工作 需要 ...

  8. Flutter 自定义组件实战之Cupertino(iOS)风格的复选框

    继上一篇Flutter自定义组件的视频短课(视频地址: https://www.bilibili.com/video/BV1ap4y1U7UB/ )后,我们继续来聊自定义组件.视频中我为大家详解了Cu ...

  9. Flutter 自定义组件实战

    Flutter 自定义组件实战

最新文章

  1. 这5种动态炫酷图,用Python就可以画!
  2. 全球Top5互联网巨头崛起秘诀,真相竟然是?
  3. 面向对象UML中类关系
  4. 汽车abs matlab仿真模糊pid控制
  5. Python 类的特性讲解
  6. 金融的财务的一些概念
  7. thinkphp传递参数
  8. [BOOST] BOOST::Format
  9. linux shell express,Linux下使Shell 命令脱离终端在后台运行
  10. spark的rdd的含义_Spark里边:到底是什么RDD
  11. 用java设计空间管理系统_一套简单通用的Java后台管理系统,拿来即用,非常方便(附项目地址)...
  12. html怎么设置光线,vray渲染器太阳光参数怎么设置?
  13. 官版树莓派Pi Pico和YD-RP2040版本对比
  14. mac java 配置环境变量配置_Mac 配置环境变量的方法
  15. 实对称矩阵一定可以相似对角化
  16. 如何入门 Python 爬虫?50集免费全套教程视频让你轻松掌握
  17. 数据禾|2020年青海省小麦种植分布数据
  18. C++的35个技巧阅读笔记(五)
  19. php eot,PHP EOT定界符的使用详解
  20. 三菱PLC 通讯 python代码

热门文章

  1. 工厂模式一之简单工厂
  2. [UML]UML系列——状态机图statechart diagram
  3. 基于TCP的一对回射客户/服务器程序及其运行过程分析( 下 )
  4. 转:Linux--进程间通信(信号量,共享内存)
  5. 【NGN学习笔记】5 IMS技术
  6. mongodb学习笔记(1)
  7. 选购一台计算机得出三条建议,如何挑选一台适合你的电脑?了解这几项配置即可!...
  8. Altium Designer 的使用笔记
  9. linux卸载vs codeblocks,哪个适合linux? GNU make vs cmake vs codeblocks vs qmake
  10. python字符串截取_Python-变量-No3