Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter 如何更改按钮单击时的图标?_Flutter_Dart - Fatal编程技术网

Flutter 如何更改按钮单击时的图标?

Flutter 如何更改按钮单击时的图标?,flutter,dart,Flutter,Dart,我试着用这段代码在点击按钮时切换按钮图标,问题是图标既没有显示也没有改变 LibraTextField( labelText:“旧密码”, 引导图标:assetConstants.icLock, trailingIcon:assetConstants.icUnSee, 蒙蔽文本:_蒙蔽文本, onTap:iconStatus,), LibraTextField( labelText:“新密码”, 引导图标:assetConstants.icLock, trailingIcon:assetCons

我试着用这段代码在点击按钮时切换按钮图标,问题是图标既没有显示也没有改变

LibraTextField(
labelText:“旧密码”,
引导图标:assetConstants.icLock,
trailingIcon:assetConstants.icUnSee,
蒙蔽文本:_蒙蔽文本,
onTap:iconStatus,),
LibraTextField(
labelText:“新密码”,
引导图标:assetConstants.icLock,
trailingIcon:assetConstants.icUnSee,
蒙蔽文本:_蒙蔽文本,
onTap:iconStatus,),
LibraTextField(
labelText:“确认新密码”,
引导图标:assetConstants.icLock,
trailingIcon:assetConstants.icUnSee,
蒙蔽文本:_蒙蔽文本,
onTap:iconStatus,),
变量的声明

bool\u obscureText=true;
bool _iconState=true;
var_trailingIcon;
void iconStatus(){
设置状态(){
_蒙蔽文本=!\u蒙蔽文本;
_iconState=!\u iconState;
如果(_iconState=true){
_trailingIcon=assetConstants.icUnSee;
}
如果(_iconState=false){
_trailingIcon=assetConstants.icSee;
}
});
}
试试这个:

void iconStatus() {
    _iconState = !_iconState;
    setState(() {
        _obscureText = !_obscureText;
        _trailingIcon = _iconState ? AssetsConstants.icUnSee : AssetsConstants.icSee;
    });
}

如果
\u obsolizeText
有效,则图标也应有效,否则共享代码中使用这些布尔值的部分。

我建议不要将图标存储在状态中,并在构建方法中选择它,因为它是渲染的一部分,而不是实际状态

查看您的代码,错误在于您没有使用存储在状态中的图标
trailingIcon
,您留下了一个常量值

我举了一个例子说明它是如何工作的:


类以某种形式扩展StatefulWidget{
@凌驾
_SomeFormState createState()=>\u SomeFormState();
}
类_SomeFormState扩展了状态{
var _obsolizeText=真;
@凌驾
小部件构建(构建上下文){
最终图标=_obscureText?assetConstants.icUnSee:assetConstants.icSee;
返回列(
儿童:[
LibraTextField(
labelText:“旧密码”,
引导图标:assetConstants.icLock,
拖曳图标:图标,
蒙蔽文本:_蒙蔽文本,
onTap:iconStatus,
),
LibraTextField(
labelText:“新密码”,
引导图标:assetConstants.icLock,
拖曳图标:图标,
蒙蔽文本:_蒙蔽文本,
onTap:iconStatus,
),
LibraTextField(
labelText:“确认新密码”,
引导图标:assetConstants.icLock,
拖曳图标:图标,
蒙蔽文本:_蒙蔽文本,
onTap:iconStatus,
),
],
);
}
}

您不应该选择setState上的图标,最好在build方法中进行渲染。另外,你能详细说明你的问题吗?你发布的代码显示的不多。