Flutter 更改默认TextFormField';s图标颜色从灰色变为除选择时显示原色以外的任何颜色
我想更改TextFormField图标的默认颜色,这也会在选择时得到更改。几乎没有改变颜色的方法,但没有一种适合我 1.设置图标颜色 当直接在下方更改图标颜色时,图标颜色在选中时不会更改,下面是相同的代码,以及在选中或未选中字段时显示红色的屏幕截图Flutter 更改默认TextFormField';s图标颜色从灰色变为除选择时显示原色以外的任何颜色,flutter,dart,flutter-layout,Flutter,Dart,Flutter Layout,我想更改TextFormField图标的默认颜色,这也会在选择时得到更改。几乎没有改变颜色的方法,但没有一种适合我 1.设置图标颜色 当直接在下方更改图标颜色时,图标颜色在选中时不会更改,下面是相同的代码,以及在选中或未选中字段时显示红色的屏幕截图 TextFormField( maxLength: 15, decoration: InputDecoration( labelText: "USER NAME", p
TextFormField(
maxLength: 15,
decoration: InputDecoration(
labelText: "USER NAME",
prefixIcon: IconTheme(data: IconThemeData(
color: Colors.redAccent
), child: Icon(Icons.email,))
),
onSaved: (username) => _username = username,
),
2.保留默认值
当未选择字段时,它将显示灰色,当选择字段时,它将显示原色。下面是相同的屏幕截图。在这里,我想改变颜色的图标从灰色到红色,并希望显示原色的选择
注意:-如果我们能用主题来做这件事就好了
下面的代码将生成
FocusNodes
您需要管理TextFormFields
的焦点,并在焦点从一个字段更改到另一个字段时执行setState
。我们只是创建一个焦点节点列表,监听每个节点上的更改,并将它们分配给一个字段:
List<FocusNode> _focusNodes = [
FocusNode(),
FocusNode(),
FocusNode(),
FocusNode(),
];
@override
void initState() {
_focusNodes.forEach((node){
node.addListener(() {
setState(() {});
});
});
super.initState();
}
@override
Widget build(BuildContext context) {
return Column(
children: <Widget>[
TextFormField(
focusNode: _focusNodes[0],
decoration: InputDecoration(
prefixIcon: Icon(Icons.email,
color: _focusNodes[0].hasFocus ? Theme.of(context).accentColor : Colors.grey,
),
),
),
TextFormField(
focusNode: _focusNodes[1],
decoration: InputDecoration(
prefixIcon: Icon(Icons.email,
color: _focusNodes[1].hasFocus ? Theme.of(context).accentColor : Colors.grey,
),
),
),
TextFormField(
focusNode: _focusNodes[2],
decoration: InputDecoration(
prefixIcon: Icon(Icons.email,
color: _focusNodes[2].hasFocus ? Theme.of(context).accentColor : Colors.grey,
),
),
),
],
);
}
List\u focusNodes=[
FocusNode(),
FocusNode(),
FocusNode(),
FocusNode(),
];
@凌驾
void initState(){
_focusNodes.forEach((节点){
node.addListener((){
setState((){});
});
});
super.initState();
}
@凌驾
小部件构建(构建上下文){
返回列(
儿童:[
TextFormField(
焦点节点:_焦点节点[0],
装饰:输入装饰(
前缀图标:图标(Icons.email,
颜色:_focusNodes[0]。hasFocus?主题。of(上下文)。accentColor:Colors.grey,
),
),
),
TextFormField(
聚焦节点:_聚焦节点[1],
装饰:输入装饰(
前缀图标:图标(Icons.email,
颜色:_focusNodes[1]。hasFocus?主题。of(上下文)。accentColor:Colors.grey,
),
),
),
TextFormField(
聚焦节点:_聚焦节点[2],
装饰:输入装饰(
前缀图标:图标(Icons.email,
颜色:_focusNodes[2]。hasFocus?主题。of(上下文)。accentColor:Colors.grey,
),
),
),
],
);
}
下面的代码将生成FocusNodes
您需要管理TextFormFields
的焦点,并在焦点从一个字段切换到另一个字段时执行setState
。我们只是创建一个焦点节点列表,监听每个节点上的更改,并将它们分配给一个字段:
List<FocusNode> _focusNodes = [
FocusNode(),
FocusNode(),
FocusNode(),
FocusNode(),
];
@override
void initState() {
_focusNodes.forEach((node){
node.addListener(() {
setState(() {});
});
});
super.initState();
}
@override
Widget build(BuildContext context) {
return Column(
children: <Widget>[
TextFormField(
focusNode: _focusNodes[0],
decoration: InputDecoration(
prefixIcon: Icon(Icons.email,
color: _focusNodes[0].hasFocus ? Theme.of(context).accentColor : Colors.grey,
),
),
),
TextFormField(
focusNode: _focusNodes[1],
decoration: InputDecoration(
prefixIcon: Icon(Icons.email,
color: _focusNodes[1].hasFocus ? Theme.of(context).accentColor : Colors.grey,
),
),
),
TextFormField(
focusNode: _focusNodes[2],
decoration: InputDecoration(
prefixIcon: Icon(Icons.email,
color: _focusNodes[2].hasFocus ? Theme.of(context).accentColor : Colors.grey,
),
),
),
],
);
}
List\u focusNodes=[
FocusNode(),
FocusNode(),
FocusNode(),
FocusNode(),
];
@凌驾
void initState(){
_focusNodes.forEach((节点){
node.addListener((){
setState((){});
});
});
super.initState();
}
@凌驾
小部件构建(构建上下文){
返回列(
儿童:[
TextFormField(
焦点节点:_焦点节点[0],
装饰:输入装饰(
前缀图标:图标(Icons.email,
颜色:_focusNodes[0]。hasFocus?主题。of(上下文)。accentColor:Colors.grey,
),
),
),
TextFormField(
聚焦节点:_聚焦节点[1],
装饰:输入装饰(
前缀图标:图标(Icons.email,
颜色:_focusNodes[1]。hasFocus?主题。of(上下文)。accentColor:Colors.grey,
),
),
),
TextFormField(
聚焦节点:_聚焦节点[2],
装饰:输入装饰(
前缀图标:图标(Icons.email,
颜色:_focusNodes[2]。hasFocus?主题。of(上下文)。accentColor:Colors.grey,
),
),
),
],
);
}
如果要在选择textFormField时更改图标颜色,
根据下面的说明进行更改
...
Theme(
child: Column(
children: <Widget>[
TextFormField(
maxLength: 15,
decoration: InputDecoration(
labelText: "USER NAME",
prefixIcon: Icon(Icons.email,)
),
onSaved: (username) => _username = username,
),
TextFormField(
maxLength: 15,
decoration: InputDecoration(
labelText: "EMAIL",
prefixIcon: Icon(Icons.email,)
),
onSaved: (usermail) => _useremail = usermail,
),
],
),
data: Theme.of(context)
.copyWith(primaryColor: Colors.redAccent,),
),
...
。。。
主题(
子:列(
儿童:[
TextFormField(
最大长度:15,
装饰:输入装饰(
labelText:“用户名”,
前缀:图标(Icons.email,)
),
onSaved:(用户名)=>\u用户名=用户名,
),
TextFormField(
最大长度:15,
装饰:输入装饰(
labelText:“电子邮件”,
前缀:图标(Icons.email,)
),
onSaved:(usermail)=>\u useremail=usermail,
),
],
),
数据:主题(上下文)
.copyWith(原色:Colors.redAccent,),
),
...
结论:
使用主题小部件包装所有textFormFields小部件,并将数据设置为高亮显示的颜色。如果要在选择textFormField时更改图标颜色,
根据下面的说明进行更改
...
Theme(
child: Column(
children: <Widget>[
TextFormField(
maxLength: 15,
decoration: InputDecoration(
labelText: "USER NAME",
prefixIcon: Icon(Icons.email,)
),
onSaved: (username) => _username = username,
),
TextFormField(
maxLength: 15,
decoration: InputDecoration(
labelText: "EMAIL",
prefixIcon: Icon(Icons.email,)
),
onSaved: (usermail) => _useremail = usermail,
),
],
),
data: Theme.of(context)
.copyWith(primaryColor: Colors.redAccent,),
),
...
。。。
主题(
子:列(
儿童:[
TextFormField(
最大长度:15,
装饰:输入装饰(
labelText:“用户名”,
前缀:图标(Icons.email,)
),
onSaved:(用户名)=>\u用户名=用户名,
),
TextFormField(
最大长度:15,
装饰:输入装饰(
labelText:“电子邮件”,
前缀:图标(Icons.email,)
),
onSaved:(usermail)=>\u useremail=usermail,
),
],
),
数据:主题(上下文)
.copyWith(原色:Colors.redAccent,),
),
...
结论:
包扎