有没有一种方法可以阻止CustomScrollView在激活键盘时自动向下滚动?

时间:2019-12-10 23:16:13

标签: android-layout flutter dart flutter-layout

似乎,只要我专注于TextField(位于SliverPersistentHeader内),SliverList + SliverPersistentHeader就会向下滚动。我创建了一些我的意思在下面的模型: enter image description here

因此,在此模型中,用户从第一个布局开始,向上滚动以继续查看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,其余的我认为应该基于名称。

您的帮助将不胜感激:)

谢谢!

1 个答案:

答案 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,等等。