Flutter/Dart - 关于如何解决未来问题的建议?
Flutter/Dart - Suggestions for how to Troubleshoot a Future?
虽然它以前可以工作,但由于某种原因我的代码现在停止工作了。虽然它获取了所需的 json 数据,但构建不会呈现。我的应用程序页面上应该显示页面视图的错误是;
type String is not a subtype of 'Map<String,dynamic>'
但经过一些调整,现在的错误是;
invalid arguments(s)
我想我可能已经将范围缩小到未来;
FutureBuilder<List<SpeakContent>> futureStage() {
return new FutureBuilder<List<SpeakContent>>(
future: downloadJSON(),
builder: (context, snapshot) {
if (snapshot.hasData) {
print("Snapshot has data.");
List<SpeakContent> speakcrafts = snapshot.data;
return new CustomPageView(speakcrafts);
} else if (snapshot.hasError) {
return Text('${snapshot.error}');
}
return new CircularProgressIndicator();
},
);
}
Future<List<SpeakContent>> downloadJSON() async {
final jsonEndpoint =
"http://example.com/getContent.php?";
final response = await get(jsonEndpoint);
if (response.statusCode == 200) {
List speakcrafts = json.decode(response.body);
debugPrint(speakcrafts.toString());
return speakcrafts
.map((speakcraft) => new SpeakContent.fromJson(speakcraft))
.toList();
} else
throw Exception('We were not able to successfully download the json data.');
}
虽然它没有抛出错误,但我注意到它没有在“if (snapshot.hasData)”行之后打印我的测试语句。
我不应该看到“快照有数据”吗?出现在我的 Android Studio 控制台中?
根据您提供的内容,这
type String is not a subtype of 'Map<String,dynamic>'
必须是这样的:
return Text('${snapshot.error}');
这意味着您的 downloadJSON()
引发了异常。在那种情况下,print('Snapshot has data.');
永远不会执行,我上面引用的下一个案例将被执行。
请在 downloadJSON()
的正文中打断点,运行 逐行查看在何处抛出的内容。
另外,你在这里犯了一个无关紧要但很大的错误。不要这样调用 downloadJSON()
。这个函数在每次重新渲染时执行,可以多次。您将在每次重绘小部件时启动 JSON 下载。这可能会增加您的后端账单……我将在本次演讲中更详细地解释它:https://youtu.be/vPHxckiSmKY?t=4771
按照 Gazihan Alankus 和 scrimau 的建议执行故障排除提示后,我找到了 MYSQL 数据库中的单个空条目的罪魁祸首。可怕...必须找出如何防止将来出现该问题。
虽然它以前可以工作,但由于某种原因我的代码现在停止工作了。虽然它获取了所需的 json 数据,但构建不会呈现。我的应用程序页面上应该显示页面视图的错误是;
type String is not a subtype of 'Map<String,dynamic>'
但经过一些调整,现在的错误是;
invalid arguments(s)
我想我可能已经将范围缩小到未来;
FutureBuilder<List<SpeakContent>> futureStage() {
return new FutureBuilder<List<SpeakContent>>(
future: downloadJSON(),
builder: (context, snapshot) {
if (snapshot.hasData) {
print("Snapshot has data.");
List<SpeakContent> speakcrafts = snapshot.data;
return new CustomPageView(speakcrafts);
} else if (snapshot.hasError) {
return Text('${snapshot.error}');
}
return new CircularProgressIndicator();
},
);
}
Future<List<SpeakContent>> downloadJSON() async {
final jsonEndpoint =
"http://example.com/getContent.php?";
final response = await get(jsonEndpoint);
if (response.statusCode == 200) {
List speakcrafts = json.decode(response.body);
debugPrint(speakcrafts.toString());
return speakcrafts
.map((speakcraft) => new SpeakContent.fromJson(speakcraft))
.toList();
} else
throw Exception('We were not able to successfully download the json data.');
}
虽然它没有抛出错误,但我注意到它没有在“if (snapshot.hasData)”行之后打印我的测试语句。
我不应该看到“快照有数据”吗?出现在我的 Android Studio 控制台中?
根据您提供的内容,这
type String is not a subtype of 'Map<String,dynamic>'
必须是这样的:
return Text('${snapshot.error}');
这意味着您的 downloadJSON()
引发了异常。在那种情况下,print('Snapshot has data.');
永远不会执行,我上面引用的下一个案例将被执行。
请在 downloadJSON()
的正文中打断点,运行 逐行查看在何处抛出的内容。
另外,你在这里犯了一个无关紧要但很大的错误。不要这样调用 downloadJSON()
。这个函数在每次重新渲染时执行,可以多次。您将在每次重绘小部件时启动 JSON 下载。这可能会增加您的后端账单……我将在本次演讲中更详细地解释它:https://youtu.be/vPHxckiSmKY?t=4771
按照 Gazihan Alankus 和 scrimau 的建议执行故障排除提示后,我找到了 MYSQL 数据库中的单个空条目的罪魁祸首。可怕...必须找出如何防止将来出现该问题。