如何使用可折叠的搜索栏实现SliverAppBar

这就是我正在尝试做的事情,它是iOS上非常常见的Widget。这是我的代码:

return Scaffold(

backgroundColor: Colors.white,

body: CustomScrollView(

slivers: <Widget>[

SliverAppBar(

automaticallyImplyLeading: false,

pinned: true,

titleSpacing: 0,

backgroundColor: Colors.white,

elevation: 1.0,

title: Container(

width: double.infinity,

child: Row(

crossAxisAlignment: CrossAxisAlignment.center,

mainAxisAlignment: MainAxisAlignment.spaceAround,

mainAxisSize: MainAxisSize.max,

children: <Widget>[

CupertinoButton(

padding: EdgeInsets.all(0),

onPressed: () {},

child: AutoSizeText(

'Ordenar',

style: TextStyle(

color: Color(0xff16161F),

fontFamily: 'Brutal',

fontSize: 17.0,

),

),

),

AutoSizeText(

'Equipos 14',

style: TextStyle(

color: Color(0xff16161F),

fontFamily: 'Archia',

fontSize: 22.0,

),

),

CupertinoButton(

padding: EdgeInsets.all(0),

onPressed: () {},

child: AutoSizeText(

'Editar',

style: TextStyle(

color: Color(0xff16161F),

fontFamily: 'Brutal',

fontSize: 17.0,

),

),

),

],

),

),

centerTitle: true,

),

SliverFillRemaining(

child: Center(

child: CupertinoButton(

onPressed: () {

setState(() {

(isBottom) ? isBottom = false : isBottom = true;

});

},

child: Text('YESSS'),

),

),

),

],

),

bottomNavigationBar: (isBottom) ? _toolBar() : _tabBar(),

);

我尝试将a添加CupertinoTextField()bottom属性中,但是它进入了我的内部Row()并使所有内容弄乱了。有没有人做到这一点,或者知道如何实现?

谢谢。

回答:

我设法解决了。SliverAppBar有一个名为的属性flexibleSpace。在这里,您放置了一个FlexibleSpaceBar包含background属性的。现在,不要上当,这不仅限于纯色或图像。它可以带任何您想要的小部件。就我而言,我想添加一个搜索栏。并且因为此属性将填充整个expandedHeight属性,所以您想添加一个小的空白,以使自定义窗口小部件不会在SliverAppBar上绘制。这是相关的代码段:

flexibleSpace: FlexibleSpaceBar(

background: Column(

children: <Widget>[

SizedBox(height: 90.0),

Padding(

padding: const EdgeInsets.fromLTRB(16.0, 6.0, 16.0, 16.0),

child: Container(

height: 36.0,

width: double.infinity,

child: CupertinoTextField(

keyboardType: TextInputType.text,

placeholder: 'Filtrar por nombre o nombre corto',

placeholderStyle: TextStyle(

color: Color(0xffC4C6CC),

fontSize: 14.0,

fontFamily: 'Brutal',

),

prefix: Padding(

padding:

const EdgeInsets.fromLTRB(9.0, 6.0, 9.0, 6.0),

child: Icon(

Icons.search,

color: Color(0xffC4C6CC),

),

),

decoration: BoxDecoration(

borderRadius: BorderRadius.circular(8.0),

color: Color(0xffF0F1F5),

),

),

),

),

],

),

),

),

这就是结果。滚动向上滚动时,搜索栏将消失。希望这对想要这样做的人有所帮助。

以上是 如何使用可折叠的搜索栏实现SliverAppBar 的全部内容, 来源链接: utcz.com/qa/423012.html

回到顶部