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

Flutter Survey Kit自定义themeData时进度条始终显示100%

问题原因分析

自定义ThemeData导致进度条始终显示100%,核心原因是直接构建全新的ThemeData而非基于默认主题扩展,丢失了Survey Kit组件依赖的默认配置项。Survey Kit的进度计算逻辑依赖Theme中部分隐含的默认参数,当你完全重写ThemeData时,这些参数被重置,导致组件误判当前步骤已完成所有任务。

另外,即使仅修改textTheme,若没有基于原有textTheme进行扩展(比如直接赋值TextTheme(displayMedium: ...)而非ThemeData.light().textTheme.copyWith(displayMedium: ...)),也会丢失textTheme中其他默认字段,进而影响进度条的状态计算逻辑。

解决方案

1. 基于默认主题扩展自定义样式

不要直接实例化全新的ThemeData,而是用Flutter默认主题或Survey Kit默认主题的copyWith方法来修改样式,保留所有默认配置:

// 正确示例:基于浅色主题扩展自定义样式
final customTheme = ThemeData.light().copyWith(
  primaryColor: Colors.blue,
  textTheme: ThemeData.light().textTheme.copyWith(
    displayMedium: const TextStyle(
      fontFamily: 'CustomFont',
      fontSize: 22,
      fontWeight: FontWeight.bold,
    ),
  ),
  // 添加其他需要自定义的样式项
);

2. 确保SurveyKit组件正确应用主题

将自定义主题通过Theme组件包裹SurveyKit,或者直接在SurveyKit的theme参数中传入扩展后的ThemeData:

Theme(
  data: customTheme,
  child: SurveyKit(
    onResult: (result) {},
    task: navigableTask,
  ),
)

3. 排查进度条相关主题配置

检查自定义ThemeData中是否意外覆盖了progressIndicatorTheme或其他与进度条相关的主题配置,若有,需确保这些配置基于默认值修改,而非完全重写:

progressIndicatorTheme: ThemeData.light().progressIndicatorTheme.copyWith(
  color: Colors.green,
),

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 14:37:05