ScrollController _scrollController = ScrollController();
double _scrollIndicatorWidth = 60.w;//指示器的长度
double _maxScrollPaddingValue = 30.w;//指示器中蓝条可移动的最大距离
double _scrollPaddingValue = 0.0;//指示器中蓝条左边距(蓝条移动距离)
void initState() {
super.initState();
_scrollController.addListener(() {
setState(() {
final double scrollOffset = _scrollController.offset;
final double? scrollableExtent = _scrollController.position.maxScrollExtent;
// final double viewportExtent = _scrollController?.position?.viewportDimension;
if(scrollableExtent != null){
_scrollPaddingValue = (scrollOffset / scrollableExtent) * _maxScrollPaddingValue;
}
if(_scrollPaddingValue > _maxScrollPaddingValue){
_scrollPaddingValue = _maxScrollPaddingValue;
}
});
});
}
void dispose() {
_scrollController.dispose();
super.dispose();
}
//横向tab布局
_goodsTabBar() {
if(_goodsCategoryList.isNotEmpty){
return Column(
children: [
SingleChildScrollView(
controller: _scrollController,
scrollDirection: Axis.horizontal,
child:TabBar(
controller: _tabController,
// tabs的长度超出屏幕宽度后,TabBar,是否可滚动
isScrollable: true,
// 设置tab文字的类型
labelStyle: TextStyle(
fontSize: 24.sp, letterSpacing: 1),
// 设置tab选中得颜色
labelColor: JadeColors.green_7,
labelPadding: EdgeInsets.symmetric(horizontal: 10.w),
// 设置tab未选中的颜色
unselectedLabelColor: JadeColors.grey,
// 设置tab未选中时文字的类型
unselectedLabelStyle: TextStyle(fontSize: 24.sp, letterSpacing: 1),
indicatorWeight: 0.01,
indicatorColor: JadeColors.grey_2,
tabs: _goodsCategoryList.asMap().entries
.map((entry){
int index = entry.key;
GoodsCategoryBean value = entry.value;
bool isSelect = _tabController!.index == index;
return Column(
children: [
Container(
margin: EdgeInsets.only(top: 40.w,bottom: 10.w),
width: 90.w,height: 90.w,
decoration: BoxDecoration(
border: isSelect
? Border.all(color: JadeColors.green_7, width: 0.8)
: null,
borderRadius: BorderRadius.circular(5),
),
child: Image.asset(value.iconPath ?? PathConfig.aTuiLogo),
),
Text(value.name!)
],
);
}).toList(),
)
),
_scrollIndicator()
],
);
}else{
return SizedBox.shrink();
}
}
flutter简单自定义跟随手指滑动的横向指示器
最新推荐文章于 2025-05-29 19:51:34 发布