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

Flutter中如何获取默认InputDecorationTheme.fillColor?

解决自定义FormField获取默认填充色为null的问题

默认TextFormField的灰色填充色并不是直接从Theme.of(context).inputDecorationTheme.fillColor获取的——当你没显式设置inputDecorationTheme.fillColor时,Flutter会自动使用主题色板里的colorScheme.surfaceVariant作为默认填充色(前提是filled属性为true)。

你可以这样修改代码来正确获取默认填充色:

class CustomFormField extends FormField<String> {
  CustomFormField({
    String? initialText,
    FormFieldSetter<String>? onSaved,
    FormFieldValidator<String>? validator,
    AutovalidateMode? autovalidateMode,
    Key? key,
  }) : super(
          onSaved: onSaved,
          validator: validator,
          initialValue: initialText,
          autovalidateMode: autovalidateMode,
          key: key,
          builder: (FormFieldState<String> state) {
            final theme = Theme.of(state.context);
            // 优先取主题中显式配置的fillColor,无配置则使用默认的surfaceVariant
            final fillColor = theme.inputDecorationTheme.fillColor ?? theme.colorScheme.surfaceVariant;
            
            return Container(
              color: fillColor,
              // 自定义控件的UI实现
            );
          },
        );
}

如果想要完全和原生TextFormField的填充色逻辑保持一致,本质就是遵循这套优先级:显式设置的fillColor > 主题inputDecorationTheme里的filledColor > 主题色板的surfaceVariant。上面的代码已经覆盖了核心逻辑,足以让你的自定义控件和原生TextFormField的填充色表现一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 01:10:10