Flutter/Dart中满足指定条件时如何正确执行目标函数
问题根因
你写的条件分支没有实际执行_showAlertDialog函数:Dart里如果只写函数名不加后面的调用括号(),只会拿到函数的引用,不会真正运行函数内部的弹窗逻辑。
除此之外还有两个不规范的点:
setState的回调里只应该放同步的状态更新代码,弹窗触发、打印日志这类和状态更新无关的副作用逻辑不应该写在里面showDialog是Flutter内置的弹窗方法,本身不需要依赖setState触发渲染
修正方案
调整_nextCSV方法的逻辑,把条件判断挪到setState外部,调用函数时补上括号:
void _nextCSV() { setState(() { _listData = _listData; // 这里保留你原本需要更新的状态逻辑,比如_listCount自增、列表数据更新等 }); // 条件判断单独写,函数调用必须加() if (_listData[_listCount][2] == "") { _showAlertDialog(); } else { print('False'); } }
如果你坚持要用三目运算符写法,也必须给函数补上调用括号,注意同样不要把这段逻辑塞在setState回调里:
_listData[_listCount][2] == "" ? _showAlertDialog() : print('False');
小提示:如果要判断字符串为空,用
_listData[_listCount][2].isEmpty的写法比== ""更稳妥,可以覆盖值为null的异常场景(前提是你做好类型校验)。
内容的提问来源于stack exchange,提问作者Texter
相关产品推荐
相关产品推荐

