flutter - 自动展开/折叠 SliverAppBar
问题描述
如果有一种方法可以实现在用户停止滚动的中间位置(SliverAppBar 的collapsedHeight 和expandedHeight 之间)时自动将SliverAppBar 滚动到折叠或展开状态。
解决方案
不确定这是否是最好的方法,但它有效:
final _controller = ScrollController();
...
Scaffold(
body: NotificationListener<ScrollNotification>(
onNotification: (scrollNotification) {
if (scrollNotification is ScrollEndNotification &&
scrollNotification.depth == 0) {
final minExtent = scrollNotification.metrics.minScrollExtent;
final maxExtent = scrollNotification.metrics.maxScrollExtent;
final middle = (maxExtent - minExtent) / 2;
final pos = scrollNotification.metrics.pixels;
double scrollTo;
if (minExtent < pos && pos <= middle)
scrollTo = minExtent;
else if (middle < pos && pos < maxExtent) scrollTo = maxExtent;
if (scrollTo != null)
// Doesn't work without Timer
Timer(
Duration(milliseconds: 1),
() => _controller.animateTo(scrollTo,
duration: Duration(milliseconds: 300),
curve: Curves.ease));
}
return false;
},
child: NestedScrollView(
controller: _controller,
...
推荐阅读
- apache-flink - 如何在 Flink 流中缓存进程级别的局部变量?
- javascript - Keycloak check-sso 创建
- android - 从图库中选择图像作为画布背景 [Android]
- gradle - 无法解析配置的所有依赖项 [自定义配置]
- java - 将某个数字移动到数组的前面(Java)
- math - 不均匀/不均匀分布的随机浮点数
- python - 嵌套字典(如何打印所有键和列)
- pdf - 将 xfdf 合并到模板 pdf 中而不会丢失一些特殊字符(例如 ő,Ű,č)
- arrays - 如何将数据从字节向量映射到 Rust 中的结构?
- laravel - Laravel foreach 在 foreach 中订购一切