Flutter中TextFormField的focusColor与cursorColor配置问题
解决Flutter中TextFormField主题配置及光标颜色问题
焦点颜色不生效的原因及修复
你之前设置的focusColor并不是控制TextFormField焦点边框的核心属性——这个属性主要用于按钮、列表项等组件的焦点高亮,而非输入框的装饰边框样式。要统一配置输入框的焦点样式,需要在主题中通过InputDecorationTheme来定义。
同时,若想让fillColor生效,别忘了开启filled: true。
全局主题配置示例
修改你的MaterialApp主题代码,添加inputDecorationTheme统一控制输入框样式,同时通过textSelectionTheme设置光标颜色:
runApp(MaterialApp( theme: theme.copyWith( colorScheme: theme.colorScheme.copyWith( primary: globals.primaryColor, secondary: globals.highlightColor, background: globals.backgroundColor, ), // 统一配置所有TextFormField的装饰样式 inputDecorationTheme: InputDecorationTheme( fillColor: globals.primaryColor, filled: true, // 必须开启才会填充背景色 hintStyle: TextStyle(color: globals.backgroundColor, fontWeight: FontWeight.bold), // 设置焦点状态下的下划线颜色 focusedBorder: UnderlineInputBorder( borderSide: BorderSide(color: globals.highlightColor), ), // 可选:配置默认状态的下划线颜色 enabledBorder: UnderlineInputBorder( borderSide: BorderSide(color: globals.yourDefaultBorderColor), ), ), // 全局设置光标颜色 textSelectionTheme: TextSelectionThemeData( cursorColor: globals.highlightColor, ), ), ));
简化TextFormField代码
完成主题配置后,单个TextFormField只需设置个性化内容即可,无需重复定义通用样式:
TextFormField( style: TextStyle(color: globals.darkText, fontWeight: FontWeight.bold), decoration: textInputDecoration.copyWith( hintText: "Name", ), onSaved: (input) => _name = input, ),
这样就能实现所有TextFormField样式的全局统一,同时解决光标颜色和焦点边框颜色不符合预期的问题。
内容的提问来源于stack exchange,提问作者Yoqora
相关产品推荐
相关产品推荐

