@@ -45,7 +45,10 @@ class ReposDetailInfoPageState extends State<ReposDetailInfoPage>
4545 AutomaticKeepAliveClientMixin <ReposDetailInfoPage >,
4646 GSYListState <ReposDetailInfoPage >,
4747 TickerProviderStateMixin {
48+ final ScrollController scrollController = new ScrollController ();
49+
4850 int selectIndex = 0 ;
51+ double headerSize = 270 ;
4952
5053 ReposDetailInfoPageState ();
5154
@@ -118,6 +121,9 @@ class ReposDetailInfoPageState extends State<ReposDetailInfoPage>
118121 return new Future .value (null );
119122 }).then ((result) {
120123 if (result != null && result.result) {
124+ if (! isShow) {
125+ return ;
126+ }
121127 setState (() {
122128 widget.titleOptionControl.url = result.data.htmlUrl;
123129 });
@@ -165,6 +171,7 @@ class ReposDetailInfoPageState extends State<ReposDetailInfoPage>
165171 handleRefresh,
166172 onLoadMore,
167173 refreshKey: refreshIKey,
174+ scrollController: scrollController,
168175 headerSliverBuilder: (context, _) {
169176 return _sliverBuilder (context, _);
170177 },
@@ -175,25 +182,29 @@ class ReposDetailInfoPageState extends State<ReposDetailInfoPage>
175182
176183 List <Widget > _sliverBuilder (BuildContext context, bool innerBoxIsScrolled) {
177184 return < Widget > [
185+ ///头部信息
178186 SliverPersistentHeader (
179187 delegate: _InfoHeaderDelegate (
180- maxHeight: 300 ,
181- minHeight: 300 ,
182- snapConfig: FloatingHeaderSnapConfiguration (
183- vsync: this ,
184- curve: Curves .bounceInOut,
185- duration: const Duration (milliseconds: 10 ),
186- ),
187- child: new ReposHeaderItem (
188- ReposHeaderViewModel .fromHttpMap (
189- widget.userName,
190- widget.reposName,
191- ReposDetailModel .of (context).repository), (index) {
192- selectIndex = index;
193- clearData ();
194- showRefreshLoading ();
195- })),
188+ maxHeight: headerSize,
189+ minHeight: headerSize,
190+ snapConfig: FloatingHeaderSnapConfiguration (
191+ vsync: this ,
192+ curve: Curves .bounceInOut,
193+ duration: const Duration (milliseconds: 10 ),
194+ ),
195+ child: new ReposHeaderItem (
196+ ReposHeaderViewModel .fromHttpMap (widget.userName, widget.reposName,
197+ ReposDetailModel .of (context).repository),
198+ layoutListener: (size) {
199+ setState (() {
200+ headerSize = size.height;
201+ });
202+ },
203+ ),
204+ ),
196205 ),
206+
207+ ///动态放大缩小的选择案件
197208 SliverPersistentHeader (
198209 pinned: true ,
199210 delegate: _InfoHeaderDelegate (
@@ -207,6 +218,7 @@ class ReposDetailInfoPageState extends State<ReposDetailInfoPage>
207218 ),
208219 builder: (BuildContext context, double shrinkOffset,
209220 bool overlapsContent) {
221+ ///根据数值计算偏差
210222 var lr = 10 - shrinkOffset / 70 * 10 ;
211223 var radius = Radius .circular (4 - shrinkOffset / 70 * 4 );
212224 return SizedBox .expand (
@@ -218,9 +230,16 @@ class ReposDetailInfoPageState extends State<ReposDetailInfoPage>
218230 CommonUtils .getLocale (context).repos_tab_commits,
219231 ],
220232 (index) {
221- selectIndex = index;
222- clearData ();
223- showRefreshLoading ();
233+ ///切换时先滑动
234+ scrollController
235+ .animateTo (0 ,
236+ duration: Duration (milliseconds: 200 ),
237+ curve: Curves .bounceInOut)
238+ .then ((_) {
239+ selectIndex = index;
240+ clearData ();
241+ showRefreshLoading ();
242+ });
224243 },
225244 margin: EdgeInsets .zero,
226245 shape: new RoundedRectangleBorder (
@@ -265,9 +284,7 @@ class _InfoHeaderDelegate extends SliverPersistentHeaderDelegate {
265284 if (builder != null ) {
266285 return builder (context, shrinkOffset, overlapsContent);
267286 }
268- return SizedBox .expand (
269- child: child,
270- );
287+ return child;
271288 }
272289
273290 @override
0 commit comments