You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

修改列表滚动条颜色时出现PrimaryScrollController错误的解决方法

错误原因及无错误实现方案

错误原因

你给ListView.separated设置了primary: false,这会让它放弃使用Flutter默认的PrimaryScrollController;但外层的RawScrollbar默认会尝试关联PrimaryScrollController,两者的控制器不匹配,就触发了这个错误。

解决方法(两种任选其一)

方法一:显式共用同一个ScrollController

给ListView和RawScrollbar绑定同一个自定义控制器,确保滚动条和列表的滚动状态同步:

// 先定义一个ScrollController
final ScrollController _scrollController = ScrollController();

// 修改后的组件代码
RawScrollbar(
  thumbColor: Colors.purple,
  controller: _scrollController, // 绑定控制器
  child: ListView.separated(
    controller: _scrollController, // 列表也绑定同一个控制器
    primary: false, // 保留该设置无影响
    padding: EdgeInsets.only(left: 15.0, right: 15.0, top: 10.0),
    separatorBuilder: (BuildContext context, int index) {
      return Visibility(
          visible: true,
          child: Container(
            height: height * margin,
            width: width * .8,
          ));
    },
    itemCount: _foundEvents.length,
    itemBuilder: (context, index) => EventCard(
      width: width * .8,
      cardPadding: width * .05,
      height: getCardHeight(height, margin: margin),
      event: _foundEvents[index]["event"],
      isLoading: eventsState.eventIdLoading ==
          _foundEvents[index]["event"].id,
    ),
  ),
)

方法二:让ListView使用PrimaryScrollController

如果不需要自定义控制器,直接删除primary: false(或者改成primary: true,垂直滚动的ListView默认primary为true),这样RawScrollbar就能自动关联PrimaryScrollController:

RawScrollbar(
  thumbColor: Colors.purple,
  child: ListView.separated(
    // 删掉primary: false,或改为primary: true
    padding: EdgeInsets.only(left: 15.0, right: 15.0, top: 10.0),
    separatorBuilder: (BuildContext context, int index) {
      return Visibility(
          visible: true,
          child: Container(
            height: height * margin,
            width: width * .8,
          ));
    },
    itemCount: _foundEvents.length,
    itemBuilder: (context, index) => EventCard(
      width: width * .8,
      cardPadding: width * .05,
      height: getCardHeight(height, margin: margin),
      event: _foundEvents[index]["event"],
      isLoading: eventsState.eventIdLoading ==
          _foundEvents[index]["event"].id,
    ),
  ),
)

内容的提问来源于stack exchange,提问作者Orl13

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 02:05:24