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
相关产品推荐
相关产品推荐

