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

