#firebase #dart #flutter
#firebase #dart #flutter
Вопрос:
Я пытаюсь получить данные из Firestore, при отладочной печати future выполняет свою работу, и список получает данные, а в DebugPrint длина равна , но когда я пытаюсь получить данные в другом списке виджетов, получает null, в DebugPrint длина равна 0 .
model.dart
class BBModel extends Model {
int _counter = 10;
int get counter => _counter;
var db = dbBB;
List<BB> _bbs;
List<BB> get bbs => _bbs;
Future<List<BB>> getBBs() async {
var snapshot = await db.getDocuments();
for (int i = 0; i < snapshot.documents.length; i ) {
_bbs.add(BB.fromSnapshot(snapshot.documents[i]));
print(bbs.length.toString()); //recives 23
}
notifyListeners();
return _bbs;
}
}
main.dart
void main() {
var model = BBModel();
model.getBBs();
runApp(ScopedModel<BBModel>(model: BBModel(), child: MyApp()));
}
statefullpage.dart
Expanded(
flex: 1,
child: Container(
height: 400.0,
child: ScopedModelDescendant<BBModel>(
builder: (context, child, model) {
return ListView.builder(
itemCount: model.bbs.length,
itemBuilder: (context, index) {
return Text(model.bbs[index].bbID);
});
}))),
Ответ №1:
Похоже, что код, который вы написали в main.dart, неверен. Созданная модель отличается от той, которую вы отправили в своей ScopedModel.
Исправление
Измените model: model
на model: BBModel()
в вашем файле main.dart.
void main() {
final model = BBModel();
model.getBBs();
runApp(ScopedModel<BBModel>(model: model, child: MyApp()));
}
Ответ №2:
В main.dart я бы попытался выполнить:
void main() {
var model = BBModel();
model.getBBs().then((someVariableName){
runApp(ScopedModel<BBModel>(model: BBModel(), child: MyApp()));
});
}
примечание: «someVariableName» будет содержать список< BB>
Ответ №3:
Для ожидания вы можете использовать
await model.getBBs();
Однако, помимо этого, я не рекомендую загружать данные в main, так как это замедлит использование приложения, поскольку данных становится все больше. Загружайте данные только на нужные вам страницы и найдите способ сделать это.