flutter 状态栏问题
当我设置0的时候 floatingActionButton 显示正常
当我设置一点高度为什么会这样?
这是什么原因导致的?
希望知道原因 我想 floatingActionButton 可以在Appbar下边
flutter 状态栏问题
当我设置0的时候 floatingActionButton 显示正常
当我设置一点高度为什么会这样?
这是什么原因导致的?
希望知道原因 我想 floatingActionButton 可以在Appbar下边
2 回答2k 阅读✓ 已解决
2 回答784 阅读✓ 已解决
1 回答735 阅读✓ 已解决
1 回答1.4k 阅读
1 回答1.2k 阅读
2 回答951 阅读
2 回答954 阅读
建议:
不推荐下面的写法,因为AppBar已经实现了PreferredSizeWidget(Widgets like AppBar implement a PreferredSizeWidget, so that this PreferredSize widget is not necessary for them)
可以像下面这样自定义的AppBar,参考这个例子
如果非要要preferredSize的child是一个AppBar可以像下面这样,也可以把ConstrainedBox 换成SizedBox(height:0);其实就是 Size.fromHeight(0)的效果,把0换成其他的数字也是可以的
为什么要添加ConstrainedBox、SizedBox :
下面是我的Build方法实现,和你上面的不太一样;如果把ConstrainedBox去掉就会出现类似你那种的情况
如果你知道的话请告知🙏
)接下来打断点,跟着代码运行一下看看FloatingActionButton布局时的top数据;
下面是scaffold.dart文件中 performLayout方法部分实现,我的flutter版本:3.19.5
其中floatingActionButton的位置由fabOffset和fabSize决定;而fabSize只有宽度和高度; 我门还需要fabOffset才能确定floatingActionButton的位置;previousFloatingActionButtonLocation、currentFloatingActionButtonLocation是为了计算之前和现在位置的差值进行动画用的;例子中的floatingActionButton的位置是固定的;所以currentFloatingActionButtonLocation 数值等于previousFloatingActionButtonLocation 并且等于 fabOffset(根据显示的数据能判断是相等的,内部实现代码省略);
所以获取currentFloatingActionButtonLocation就可以获取floatingActionButton的top值
; 下面代码是getOffset的实现;位于floting_action_button_location.dart 文件中因为例子中floatingActionButton的X轴方向布局是没有问题的,所以下面代码中只关心 getOffsetY(scaffoldGeometry, adjustment)的实现,此时 scaffoldGeometry.contentTop = 25,scaffoldGeometry.minViewPadding.top = 24;scaffoldGeometry.floatingActionButtonSize.height = 737.45454545;
所以 scaffoldGeometry.contentTop - fabHalfHeight = -343.7
所以 currentFloatingActionButtonLocation 这个偏移量top值就是-343.7;也就是floatingActionButton的top值等于 -343.7,这就造成了floatingActionButton显示不完全
看一下上面scaffold.dart文件中 performLayout方法部分实现中scaffoldGeometry.contentTop的值等于appBarHeight;appBarHeight的定义如下:
上面layoutChild这个方法会布局appBar,appBar会循环布局里面的子组件,然后返回最后的高度和宽度;这里的appBarHeight等于appBar布局后的高度,这里是25;而不是1;
所以才想到添加ConstrainedBox或者SizedBox 强制约束
来强制设置AppBar高度;AppBar布局后高度为什么是25尼? 😂😂
上面最最最有价值的地方是
解决问题的思路
,一定要慢慢培养