Flutter中sqflite读取的字符串条件判断不生效问题
问题根因及修复方案
1. 条件判断不生效的核心原因
Dart中对Iterable类型(map方法的返回值就是Iterable)调用toString()时,默认会把所有元素用圆括号包裹。你打印的输出为val_s_list: (1),说明_val_s_list的实际值是"(1)"(带左右圆括号),和你判断条件里的"1"完全不相等,所以永远会进入else分支返回2。
2. 代码存在的其他问题
setState是无返回值的void方法,你在setState的回调函数中写return语句,只会终止回调执行,不会作为choosen_radio_s方法的返回值返回,整个方法的返回逻辑完全不生效。- 你的代码中声明了
String val_s变量,但赋值操作修改的是val_p1,打印的又是val_s,变量名不匹配,即使修复判断逻辑也可能拿不到预期结果。 - 不需要把赋值逻辑放在
setState回调里return,直接修改目标变量后调用setState刷新UI即可。
修复后的代码示例
第一步:正确提取目标字符串
不要直接对Iterable调用toString(),如果你要取第一个元素的值,直接用first属性获取:
// 原来的错误写法 // String _val_s_list=values_list_r.map((e) => e!=null ? e.s_redio_q : ' ').toString(); // 修复写法:提取第一个元素值,不会带括号 String _val_s = values_list_r.map((e) => e?.s_redio_q ?? ' ').first; print("val_s: $_val_s"); // 此时打印输出为1,无多余括号
第二步:修正方法逻辑
String val_p1; // 统一变量名,如果需要用val_s就直接替换为val_s void choosen_radio_s(String targetVal){ if(targetVal == "1"){ val_p1 = "1"; } else { val_p1 = "2"; } setState(() {}); // 修改变量后统一调用刷新UI }
第三步:调用方法
choosen_radio_s(_val_s); print("val_p1: $val_p1"); // 此时会输出预期的1
内容的提问来源于stack exchange,提问作者Hamed Zahiri
相关产品推荐
相关产品推荐

