钉钉标记项滚动吸附效果
思路: 使用 Stack 布局,一开始把 DTMessageTopQuick 组件加入到容器中,监听滚动,来改变 opacity 值显示出 DTMessageTopQuick
- 修改
DTMessageScreenextendsStatefulWidget
class DTMessageScreen extends StatefulWidget {}
- 使用 Stack 布局 + Positioned实现,修改 build 方法
@overrideWidget build(BuildContext context) {return Scaffold(backgroundColor: Colors.white,appBar: buildAppBar(context),body: Stack(children: <Widget>[SingleChildScrollView(controller: _scrollController,child: Column(children: <Widget>[DTMessageSearchDecoration(),DTMessageTopQuick(),DTMessageTopMask(),DTMessageListView(),],),),Positioned(top: 0,left: 0,right: 0,child: AnimatedOpacity(opacity: topQuickOpacity,duration: Duration.zero,child:Container(color: Colors.white, child: DTMessageTopQuick())),),],),);}
监听 SingleChildScrollView 滚动,改变 Positioned 的 opacity 值
ScrollController _scrollController;double topQuickOpacity = 0.0;@overridevoid initState() {_scrollController = ScrollController();_scrollController..addListener(() {int offset = _scrollController.offset.ceil();this.setState(() {topQuickOpacity = offset > kSize70 ? 1.0 : 0.0;});});super.initState();}
这样方法只是实现的一种,还可以使用其他方法实现(其他方法暂时没有想到,TODO:)
