似乎每当我关注一个TextField(位于SliverPersistentHeader中),SliverList+SliverPersistentHeader就会向下滚动。我在下面创建了一些模拟图来表达我的意思。
所以在这个模拟中,用户从第一个布局开始,向上滚动继续查看lsit,然后当他们点击TextField时,整个东西向下移动。有什么办法可以阻止这种情况?
我还附上了我的基本Scaffold代码,供大家参考。
@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!');
}
},
),
],
),
);
}
The _makeHeader
创建SliverPersistentHeader,其余的我认为应该根据名字来理解。
非常感谢您的帮助:)
谢谢你的帮助
明白了...
return SliverAppBar(
automaticallyImplyLeading: false,
backgroundColor: Consts.coForestGreenBackground,
expandedHeight: 207,
titleSpacing: 0,
elevation: 0,
floating: false,
pinned: false,
snap: false,
flexibleSpace: FlexibleSpaceBar(
注意,这个项目不是pinnedfloatedsnapped。那么它的重要的是,输入(在这种情况下是TextField)有一个0的scrollPadding(顶部)。
您的脚手架也需要一个appbar。所以从技术上讲,你有一个appbar和一个SliverAppBar,但是SliverAppBar只是用来包裹flexibleSpace。
或者说,在元素本身的任何padding之后为零。在我的例子中,它是40,因为TextField的顶部padding为30,另外10来自包含它的元素等等。