Flutter BarcodeItemWidget调用results方法屏幕无输出问题求助
问题排查&修复方案
现有代码的问题点
- 场景覆盖不全:
results()方法仅对pdf_417、code_128两种条码格式做了处理,若扫描到其他格式的条码,会直接返回空字符串,页面自然无输出 - 字符串拆分无安全校验:处理pdf_417格式时直接取
split('%')后的索引1的元素,若条码内容不存在%字符会触发数组越界异常,导致Widget渲染失败 - 粘贴的代码存在括号缺失问题:
build方法、各容器组件的闭括号均未补全,若实际代码也是如此会直接触发语法错误
修复后的参考代码
class BarcodeItemWidget extends StatelessWidget { final BarcodeItem item; // 加final修饰不可变参数,符合StatelessWidget开发规范 BarcodeItemWidget(this.item); String results(){ String format = barcodeFormatEnumMap[item.barcodeFormat] ?? ''; if(format == "pdf_417"){ List<String> textParts = item.text.split('%'); // 先判断拆分后的数组长度是否符合要求,避免越界报错 if(textParts.length >= 2) { return "MVL code:${textParts[1]}"; } return "MVL code:格式无效"; }else if (format == "code_128"){ return "item code:${item.text}"; } // 其他格式返回兜底内容,避免空字符串无输出 return "未知条码格式:$format"; } @override Widget build(BuildContext context) { return Card( child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: <Widget>[ Row( children: [ const Padding( padding: EdgeInsets.all(8.0), child: Text("Barcode Type:", style: TextStyle(inherit: true, color: Colors.black), ), ), Padding( padding: const EdgeInsets.all(8.0), child: Text( barcodeFormatEnumMap[item.barcodeFormat] ?? '未知格式', style: const TextStyle(inherit: true, color: Colors.black), ), ), ], ), Row( children: [ Padding( padding: const EdgeInsets.all(8.0), child: Text( results() ), ), ], ) ], ), ); } }
内容的提问来源于stack exchange,提问作者neo
相关产品推荐
相关产品推荐

