Flutter自定义动态长度TabBar样式后与TabBarView联动过慢解决

如图中TabBarView滑动后TabBar联动滞后
在这里插入图片描述
修改前源码

  _controller = TabController(
        length: titleTabs.length,
        vsync: _tickerProvider,
        initialIndex: currentIndex)
      ..addListener(() {
        //TODO 监听滑动/点选位置
            
      });


  _buildBody(BuildContext context) {
    return MediaQuery.removePadding(
        context: context,
        removeTop: true,
        child: Builder(builder: (_) {
          return Container(
              color: appWhite,
              width: MediaQuery.of(context).size.width,
              child: Column(
                  crossAxisAlignment: CrossAxisAlignment.start,
                  children: [
                    _buildTop(),
                    _buildTabBar(), // TabBar
                    Expanded(child: _buildDataList()),
                  ]));
        }));
  }

  _buildTabBar() {
    return Consumer<RegularListModel>(builder: (_, model, __) {
      List<String> dataList = model.titleTabs; //动态Tab,后台取值
      if (model.isBusy || model.isError) {
        return Container();
      }
      return Container(
        color: appWhite,
        padding: EdgeInsets.fromLTRB(0, 16, 16, 0),
        child: TabBar(
          labelPadding: EdgeInsets.fromLTRB(14, 0, 0, 0),
          tabs: List.generate(
              dataList.length,
              (index) => Tab( //自定义TabBar
                    child: Container(
                      height: 22,
                      width: 42,
                      padding: EdgeInsets.only(
                          bottom: (Platform.isAndroid && index == 0) ? 1.5 : 0),
                      alignment: Alignment.center,
                      decoration: BoxDecoration(
                          borderRadius: BorderRadius.all(Radius.circular(20.0)),
                          color: index == model.currentIndex
                              ? colorFF4180FF
                              : colorFF5F8FF),
                      child: Text(
                        dataList[index],
                        style: TextStyle(
                            color: index == model.currentIndex
                                ? Colors.white
                                : colorFF4180FF,
                            fontSize: 12.0),
                      ),
                    ),
                  )),
          isScrollable: true,
          controller: model.controller,
          indicator: const BoxDecoration(),
        ),
      );
    });
  }

  _buildDataList() {
    return Consumer<RegularListModel>(builder: (_, model, __) {
        return TabBarView(
          controller: model.controller,
          children: model.titleTabs.map((item) {
            return RegularListRecordPage(symbol: item);
          }).toList());
    });
  }

修改方法 PageView 取代 TabBarView 解决

  final PageController _pageController = PageController(initialPage: 0);

  _buildDataList() {
    return Consumer<RegularListModel>(builder: (_, model, __) {
      return PageView.builder(
          itemCount: model.titleTabs.length,
          onPageChanged: (index) {
            model.controller.animateTo(index);
          },
          controller: _pageController,
          itemBuilder: (_, int index) =>
              RegularListRecordPage(symbol: model.titleTabs[index]));
    });
  }

运行如下
在这里插入图片描述

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值