Flutter中使用SingleChildScrollView时如何移除滚动回弹效果
解决SingleChildScrollView结合RefreshIndicator时的回弹问题
要移除回弹效果同时保留RefreshIndicator的下拉刷新功能,只需将SingleChildScrollView的physics参数设置为AlwaysScrollableScrollPhysics(parent: ClampingScrollPhysics())即可。
修改后的关键代码片段
SingleChildScrollView( physics: AlwaysScrollableScrollPhysics(parent: ClampingScrollPhysics()), // 其余代码保持不变 )
原理说明
ClampingScrollPhysics是无回弹的滚动物理效果,滚动到边界后不会出现弹性回弹;AlwaysScrollableScrollPhysics确保ScrollView始终处于可滚动状态,满足RefreshIndicator触发下拉刷新的必要条件;- 通过
parent参数将两者结合,既保留了下拉刷新能力,又移除了默认的回弹效果。
完整修改后的build方法
@override Widget build(BuildContext context) { return Scaffold( body: RefreshIndicator( onRefresh: () async { await Future.delayed(Duration(milliseconds: 1500)); call_dashboard(); }, child: SingleChildScrollView( physics: AlwaysScrollableScrollPhysics(parent: ClampingScrollPhysics()), child: GetBuilder<DashBoardController>( builder: (dashBoardController) { if (dashBoardController.DashBoardLoading.value) { return Center(child: CircularProgressIndicator( color: primary, )); } return Column( children: [ Container( padding: const EdgeInsets.all(12.0), color: primary6, child: Row( crossAxisAlignment: CrossAxisAlignment.start, children: [ Container( margin: EdgeInsets.only(left: 10), decoration: BoxDecoration( shape: BoxShape.circle, border: Border.fromBorderSide( BorderSide(width: 2.5, color:Colors.white))), child: CircleAvatar( radius: 30, backgroundColor: Colors.white, child: ClipOval( child: Image.network( dashBoardController.DashBoardData['data'][0]['image'].toString(), width: 60, height: 60, fit: BoxFit.cover, errorBuilder: (context, error, stackTrace) { return Image.asset( 'assets/images/errorImage.png', width: 60, height: 60, fit: BoxFit.cover, ); }, ), ), ) ), sizebox_width_7, Column( crossAxisAlignment: CrossAxisAlignment.start, mainAxisAlignment: MainAxisAlignment.start, children: [ Text( dashBoardController.DashBoardData['data'][0]['name'].toString(), style: TextStyle( color: Colors.white, fontWeight: FontWeight.w800, fontSize: 16, letterSpacing: 0.25), ), Row( mainAxisAlignment: MainAxisAlignment.start, children: [ Icon( Icons.phone, color: Colors.white, size: 18, ), sizebox_width_5, Text( dashBoardController.DashBoardData['data'][0]['mobile'].toString(), style: TextStyle( letterSpacing: 0.25, fontSize: 14, color: Colors.white), ) ], ), Row( mainAxisAlignment: MainAxisAlignment.start, children: [ Icon( Icons.email, color: Colors.white, size: 18, ), sizebox_width_5, Text( dashBoardController.DashBoardData['data'][0]['email'].toString(), style: TextStyle( letterSpacing: 0.25, fontSize: 14, color: Colors.white), ) ], ), ], ), ], ), ), sizebox_height_20, ], ); } ), ), ), ); }
内容的提问来源于stack exchange,提问作者VK Gehlot
相关产品推荐
相关产品推荐

