Flutter中JSON解析后ListView.builder()无法正常工作求助
问题排查与修复方案
嘿,我仔细看了你的代码,发现问题根源其实出在本地JSON字符串的转义处理上,另外还有几个小细节可以优化,咱们一步步来解决:
1. 修正本地JSON字符串的转义错误
你用了Dart的多行原始字符串('''包裹),这种写法内部的双引号根本不需要加反斜杠转义!你现在写的\"message\"会被当成JSON里的无效转义字符,直接导致json.decode解析失败,自然生成不了目标列表。
把localJson改成这样:
final localJson = ''' [ { "message": "Some message here 1" }, { "message": "Some message here 2" }, { "message": "Some message here 3" } ] ''';
2. 给JSON解析添加错误捕获(可选但推荐)
为了更清晰地定位问题,建议在parseJson函数里加个try-catch块,方便排查解析阶段的错误:
List<PodoClass> parseJson(String responseBody) { try { final parsed = json.decode(responseBody).cast<Map<String, dynamic>>(); return parsed.map<PodoClass>((json) => PodoClass.fromJson(json)).toList(); } catch (e) { print('JSON解析错误详情: $e'); rethrow; // 把错误抛出去让FutureBuilder捕获展示 } }
3. 优化PODO类的构造函数(可选)
可以把fromJson改成factory构造函数,写法更规范,也更符合Dart的最佳实践:
class PodoClass { String message; PodoClass({this.message}); factory PodoClass.fromJson(Map<String, dynamic> json) { return PodoClass( message: json['message'] as String, ); } }
验证效果
做完上面的修改后重新运行代码,你应该就能看到列表正常加载出三条文本了。之前的问题完全是因为多余的转义字符导致JSON解析失败,所以FutureBuilder一直停在Loading状态,或者你可以通过snapshot.error看到具体的解析错误信息。
内容的提问来源于stack exchange,提问作者Omi Shah
相关产品推荐
相关产品推荐

