在app_bar. dart文件中提到,elevation控制应用程序栏下方阴影的大小,默认情况下,如果没有内容在应用程序栏下方滚动,则不会绘制阴影。
下面是我的代码:
Scaffold(
appBar: AppBar(
brightness: Brightness.light,
backgroundColor: Colors.grey[50],
leading: IconButton(
icon: Icon(Icons.menu, color: Colors.blue),
tooltip: 'Navigation menu',
onPressed: null,
),
actions: <Widget>[
IconButton(
icon: Icon(Icons.search, color: Colors.blue,),
tooltip: 'Search',
onPressed: null,
),
],
),
body: listView,
);
阴影总是在我的情况下被画出来!有没有办法解决这个问题或者我做错了什么?
谢谢
3条答案
按热度按时间dpiehjr41#
迭戈·贝拉斯克斯写了一篇关于这个的文章。
基本上你需要的是用
elevation
值连接一个可滚动的列表视图和一个应用程序栏。当可滚动的位置在“顶部”时-将高度值设置为0,否则设置为默认值(4)。用ScrollController()
小工具很容易做到。现在添加控制器到你的列表视图,它应该看起来像这样:
最后一步是根据
isScrolledToTop
标志显示/隐藏应用程序栏的阴影:MyAppBar extends StatefulWidget implements PreferredSizeWidget
),然后将_scrollListener()
方法移到那里。由于
setState(){}
方法强制在调用它的地方重新构建小部件,因此无论是重新构建整个Page(包括主列表视图及其所有项等)还是仅重建一个AppBar小部件都很重要,后者要便宜得多。如果你需要更多的细节给我打电话。干杯!
w46czmvw2#
实际上,SliverAppBar正是使用了这种行为,当内容没有滚动到它下面时,它没有阴影,如果你愿意,它甚至可以在你滚动内容时滚动离开。这里有一个视频解释了如何在Flutter应用中使用切片:https://www.youtube.com/watch?v=wN2lpqxkB4M
另外,如果您只是不希望AppBar有阴影,则可以将其elevation属性设置为0.0,如下所示:
jogvjijk3#
要删除
AppBar
的标高,只需将elevation
设置为0。如果要在内容滚动到AppBar
下时保持标高,只需将scrolledUnderElevation
设置为非零值。请参见docs。