所以这是代码。错误是从类外部调用 loadSounds 函数时返回一个空列表。但是当从 loadcategories 调用 loadSounds 时,它可以正常工作并返回一个包含 Sound 实例的列表。即使在 loadSounds 函数中打印声音变量也会打印一个空列表。
class AudioRepository {
List<Category> categories = <Category>[];
List<Sound> sounds = <Sound>[];
Future<String> _loadCategoriesAsset() async =>
await rootBundle.loadString(Assets.soundsJson);
Future<List<Category>> loadCategories() async {
if (categories.isNotEmpty) {
return categories;
}
String jsonString = await _loadCategoriesAsset();
categories.clear();
categories.addAll(categoryFromJson(jsonString));
categories.map((c) => sounds.addAll(c.sounds)).toList();
loadSounds('1');
return categories;
}
Future<List<Sound>> loadSounds(String categoryId) async {
print(sounds);
return sounds
.where((sound) => sound.id.substring(0, 1) == categoryId)
.toList();
}
}
从 loadCategories 调用时的输出如下:
[Instance of 'Sound', Instance of 'Sound', Instance of 'Sound', Instance of 'Sound', Instance of 'Sound', Instance of 'Sound']
我在课堂外访问它,如下所示:
final _sounds = await repository.loadSounds(event.categoryId);
从外部调用或从 loadSounds 函数打印时的输出如下:
[]
那么这里有什么问题。我无法弄清楚为什么 loadSounds 函数在从类内部的 loadCategories 调用时起作用,而不是以任何方式起作用。