Flutter中从外部SentenceList类获取sentences变量值报错求助
解决Dart中访问SentenceList的sentences成员时的空指针错误
你遇到的问题很典型——空指针异常,原因其实很直接:
当你用SentenceList data = SentenceList();创建实例时,调用的是类的默认可选参数构造函数,而你没有传入sentences参数,所以data.sentences的初始值是null。这时候你直接去访问data.sentences[0],相当于在操作一个null对象的索引,自然会抛出错误。
怎么解决?给你的SentenceList实例填充有效数据就行,有两种常用方式:
1. 直接传入初始化好的Sentence列表
如果你是手动测试,可以直接构造一个非空的List<Sentence>传入:
// 先创建一个Sentence实例 final testSentence = Sentence( idName: "test_id", name: "Test Sentence", assets: "test_asset", sentence: ["Hello", "Dart"] ); // 再创建包含这个实例的SentenceList SentenceList data = SentenceList(sentences: [testSentence]); // 现在访问就不会报错了 debugPrint('myName : ${data.sentences[0].idName}');
2. 使用你已经定义好的fromJson工厂构造函数
既然你已经写了从JSON解析的逻辑,那更推荐用这种方式从实际的JSON数据生成实例,比如:
// 模拟一段符合结构的JSON数据 final sampleJson = [ { "idName": "1", "name": "Daily Sentence", "assets": "audio_1", "sentence": ["Good morning", "Have a nice day"] } ]; // 通过fromJson生成SentenceList SentenceList data = SentenceList.fromJson(sampleJson); debugPrint('myName : ${data.sentences[0].idName}'); // 会输出"1"
额外的优化建议
为了避免后续再遇到类似空指针问题,你可以修改SentenceList的构造函数,给sentences设置一个默认的空列表:
class SentenceList { final List<Sentence> sentences; // 用空列表作为默认值,避免sentences为null SentenceList({ List<Sentence> sentences, }) : sentences = sentences ?? []; factory SentenceList.fromJson(List<dynamic> parsedJson) { // 原有的解析逻辑不变 List<Sentence> sentences = parsedJson.map((i) => Sentence.fromJson(i)).toList(); return SentenceList(sentences: sentences); } }
这样即使你不小心用了SentenceList()创建实例,sentences也会是一个空列表,而不是null。之后访问的时候最好先判断列表是否为空:
if (data.sentences.isNotEmpty) { debugPrint('myName : ${data.sentences[0].idName}'); } else { debugPrint('No sentences found'); }
内容的提问来源于stack exchange,提问作者user5824983
相关产品推荐
相关产品推荐

