Как я уже сказал в комментарии, сообщение об ошибке «X был вызван на ноль» означает, что X - это не то, что является нулем, а то, что вы вызывали. В вашем случае это код проблемы:
final hotels = Provider.of<QuerySnapshot>(context);
for(var doc in hotels.documents) {
print(doc.data);
}
Ошибка говорит о том, что documents
вызывается по нулю, что означает, что hotel
равно нулю. Это означает, что выборка вашего провайдера не работает должным образом.
Я не слишком много работал с StreamProvider
, но если бы мне пришлось догадываться, это потому, что в первый раз, когда ваш виджет был собран, исходный поток не ' t еще не опубликовал никаких данных, что имеет смысл, поскольку источником потока является онлайн-сервис, которому требуется время для подключения и сбора данных. Это означает, что QuerySnapshot
для возврата нет, и поэтому Provider.of
возвращает ноль.
Обычно это можно исправить, указав StreamProvider
начальное значение. Так как типом является QuerySnapshot
, я не уверен, какое будет чувственное начальное значение, кроме нуля. В этом случае ваш единственный реальный вариант - просто обработать случай, когда hotel
равен нулю.
final hotels = Provider.of<QuerySnapshot>(context);
if (hotels == null) {
print('There is no data yet.');
return Container();
}
...