CupertinoPageScaffold、CustomScrollView
CupertinoPageScaffold 属性介绍,这是苹果风格的MT
Flutter 组件 CupertinoNavigationBar
navigationBar | 导航条
| backgroundColor | 背景色
| resizeToAvoidBottomInset | 是否调整自身大小来避免底部嵌入,默认为 true。例如键盘弹起输入时防止输入框和键盘重叠遮挡。
| child @required | 子控件
CupertinoNavigationBar 属性 介绍
属性 | 解释 |
---|---|
leading | 左侧组件 |
automaticallyImplyLeading | 是否添加默认 leading,默认为 true。当 leading 为空会默认添加一个返回按钮 |
automaticallyImplyMiddle | 是否添加默认 middle,默认为 true,如果 middle 为空,且当前 route 为 CupertinoPageRoute,会默认填充 route.title |
previousPageTitle | 当 leading 为空,且 automaticallyImplyLeading == true,会出现在默认返回箭头右边的文字 |
middle | 中间标题组件 |
trailing | 右侧组件 |
border | 边框,默认为 _kDefaultNavBarBorder |
backgroundColor | 背景色 |
brightness | 上方电量,事件,Wifi 等状态栏颜色 |
padding | 内边距,用来调节所有子组件上下左右偏移 |
actionsForegroundColor | leading 和 trailing 的默认颜色 |
transitionBetweenRoutes | 默认为 true,和滑动动画有关 |
heroTag | 默认为 _defaultHeroTag,和滑动动画有关,需要transitionBetweenRoutes未false |
CustomScrollView
注意:此组件可包含很多可滑动列表,但是包含的滑动视图只有一个Controller控制,所以都会跟着手势向同一个反向滑动
Flutter中提出一个Sliver(中文为“薄片”的意思)概念,如果一个可滚动组件支持Sliver模型,那么该滚动可以将子组件分成好多个“薄片”(Sliver),只有当Sliver出现在视口中时才会去构建它,这种模型也称为“基于Sliver的延迟构建模型”。
可滚动组件中有很多都支持基于Sliver的延迟构建模型,如ListView、GridView,但是也有不支持该模型的,如SingleChildScrollView.
这个跟安卓的思维是一致的,类似与分页加载,复用加载,数据量比较大的时候对提高加载效率非常有帮助。SingleChildScrollView只包含一个子widget,本身也只适用于子widget数量有限的场景。
对上面的 AppBar 部分进行高度设置
CustomScrollView里添加的子widget都必须是Sliver,比如添加Image或者Text都会报错
1 | Widget build(BuildContext context) { |
1 | class CustomScrollViewWidget extends StatelessWidget { |
SliverAppBar 的分析
1 | const SliverAppBar({ |
其中比较常用的leading,title,actions,backgroundColor,flexibleSpace,pinned,expandedHeight
因为CustomScrollView子widget必须是Sliver,但是换个思路,gradview和listview的子widget没有这个限制,是否以此作为多type实现的方式呢?
我实验了一下是可以的,由此可以断言,CustomScrollView可以完全实现Android多type布局的效果:
1 | class CustomScrollViewWidget extends StatelessWidget { |
- Title: CupertinoPageScaffold、CustomScrollView
- Author: 人间烟火/张佳伟版
- Created at: 2024-04-22 18:02:16
- Updated at: 2024-04-25 22:44:17
- Link: https://945912035.github.io/2024/04/22/2024-4-22/
- License: This work is licensed under CC BY-NC-SA 4.0.
Comments