有什么方法可以阻止CustomScrollView在键盘被激活时自动向下滚动?

问题描述 投票:0回答:1

似乎每当我关注一个TextField(位于SliverPersistentHeader中),SliverList+SliverPersistentHeader就会向下滚动。我在下面创建了一些模拟图来表达我的意思。enter image description here

所以在这个模拟中,用户从第一个布局开始,向上滚动继续查看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,其余的我认为应该根据名字来理解。

非常感谢您的帮助:)

谢谢你的帮助

android-layout flutter dart flutter-layout
1个回答
0
投票

明白了...

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来自包含它的元素等等。

© www.soinside.com 2019 - 2024. All rights reserved.