似乎,只要我专注于TextField(位于SliverPersistentHeader内),SliverList + SliverPersistentHeader就会向下滚动。我创建了一些我的意思在下面的模型:
因此,在此模型中,用户从第一个布局开始,向上滚动以继续查看lsit,然后在单击TextField时,整个操作向下移动。有什么办法阻止它吗?
我还附上了我的基本脚手架代码供您细读:
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: Consts.coMainBackground,
resizeToAvoidBottomInset: false,
body: CustomScrollView(
slivers: <Widget>[
_sliverAppBar(),
_makeHeader(),
BlocBuilder<AllPersonsBloc, AllPersonsState>(
builder: (context, state) {
if (state is AllPersonsLoading) {
return _buildLoading();
} else if (state is AllPersonsLoaded) {
return _sliverList(context, state.persons);
} else if (state is AllPersonsError) {
return _buildErrorMessage(state.message);
} else {
return _buildErrorMessage('Unknown error!');
}
},
),
],
),
);
}
_makeHeader
创建SliverPersistentHeader,其余的我认为应该基于名称。
您的帮助将不胜感激:)
谢谢!
答案 0 :(得分:0)
知道了...
return SliverAppBar(
automaticallyImplyLeading: false,
backgroundColor: Consts.coForestGreenBackground,
expandedHeight: 207,
titleSpacing: 0,
elevation: 0,
floating: false,
pinned: false,
snap: false,
flexibleSpace: FlexibleSpaceBar(
请注意,该项目未固定/浮动/折断。那么重要的是输入(在这种情况下为TextField)的scrollPadding(顶部)为0。
您的脚手架还将需要一个应用栏。因此,从技术上讲,您有一个appbar和一个SliverAppBar,但SliverAppBar只是用来包装flexibleSpace。
或者更确切地说,在元素自身进行填充之后为零。就我而言,它是40,因为TextField的顶部填充为30,包含填充元素的元素的顶部填充为10,等等。