Flutter如何拆分含任意长度|分隔符的字符串并展示在ListView
Dart 字符串拆分报错解决方案
错误原因
- 拆分后的列表会产生空字符串,且第一个拆分得到的条款没有
=符号,直接取下标[1]会触发数组越界报错 - 若原始字符串中竖线前后存在空白、或者混杂全角半角竖线,会导致拆分结果残留无效字符
修复后代码
String wording = data['records'][0]['policies'][0]['policywording']; // 匹配任意长度的连续全角/半角竖线拆分,适配所有竖线场景 List<String> wordings = wording.split(RegExp(r'[||]+')); List<Map<String, String>> displayData = []; for (var element in wordings) { // 清理当前项前后的空白、换行符 String trimedEle = element.trim(); // 过滤空的无效项 if (trimedEle.isEmpty) continue; // 按=最多拆分为2段,避免内容本身包含=的场景被误拆分 List<String> splited = trimedEle.split('='); if (splited.length == 1) { // 无=的项(比如首条住院政策)直接存入name,value留空 displayData.add({'name': splited[0], 'value': ''}); } else { displayData.add({ 'name': splited[0].trim(), // 拼接后续所有内容,兼容内容带=的特殊场景 'value': splited.sublist(1).join('=').trim() }); } }
ListView 渲染逻辑
渲染时判断value是否为空,对应展示不同格式即可匹配预期效果:
ListView.builder( itemCount: displayData.length, itemBuilder: (context, index) { final item = displayData[index]; return Padding( padding: const EdgeInsets.all(8.0), child: Text( item['value']!.isEmpty ? item['name']! : '${item['name']} : ${item['value']}', ), ); } )
内容的提问来源于stack exchange,提问作者rameez khan
相关产品推荐
相关产品推荐

