【发布时间】:2019-01-21 10:07:02
【问题描述】:
我想在 SliverAppBar 的 flexibleSpace 中显示一个原生视图 (HeaderContainer) 并阻止它重建。
return new Scaffold(
body: CustomScrollView(
slivers: <Widget>[
SliverAppBar(
backgroundColor: Colors.teal,
pinned: true,
expandedHeight: 180,
flexibleSpace: FlexibleSpaceBar(
background: HeaderContainer(),
// HeaderContainer is a native View (AndroidView)
),
),
SliverList(
delegate: SliverChildListDelegate([content]),
)
]
)
);
不幸的是 HeaderContainer() 在滚动过程中变得不可见时被破坏了。
HeaderContainer() 的创建非常昂贵并且需要一些时间。
是否有可能将此小部件保存在内存中并防止它在滚动时被破坏?
更新:
回滚后重建 HeaderContaienr 的问题只是原生视图(例如 AndroidView)的问题。
一些调查:
FlexibleSpaceBar 使用此行添加子项:
@override
Widget build(BuildContext context) {
...
if (opacity > 0.0) { <-- !
children.add( ... );
}
因此,如果不透明度大于零,则仅将子级添加到树中,如果不透明度为零,则将其删除(并销毁)。这会导致回滚后重建。
我最终得到了一个自定义的 flexibleSpace 小部件,其中孩子总是被添加到视图树中。
【问题讨论】:
标签: flutter