как преобразовать _list(QuerySnapshot<Карта> снимок) в список> в flutter 2.0

#flutter #flutter2.0

Вопрос:

Я пытаюсь получить список<динамический’> _лист, но так как я обновил flutter до 2.0, мне пришлось изменить свой код на _лист(QuerySnapshot<динамический’><Карта<Строка, динамический><Строка, динамический>> снимок). у этого типа нет длины или элемента, как у обычного типа списка<динамический’>. можно ли его преобразовать?

мой код:

 List _list(QuerySnapshot<Map<String, dynamic>> snapshot) {
                              return snapshot.docs
                                  .map((doc) => new Brand(
                                        doc.data()['brandId'].toString(),
                                      ))
                                  .toList();
                            }
 

позже в моем коде мне нужно будет использовать некоторые поля:

 return StaggeredGridView.countBuilder(
                              itemCount: _list.length,
                              itemBuilder: (BuildContext context, int index) {
                                Brand brand = _list.elementAt(index) as Brand;
                                return InkWell(
                                  onTap: () {
                                    Navigator.of(context).pushNamed('/Brand',
                                        arguments: new RouteArgument(
                                            id: _list[index].id)
 

сообщение об ошибке:
ошибка: Оператор «[] «не определен для типа» Функция списка(QuerySnapshot<Карта<Строка, динамическая><Строка, динамическая>>)»

любые идеи приветствуются, заранее спасибо!

Ответ №1:

на данный момент ваш _list определяется как a Function , который возвращает a List , а не List сам по себе.

Итак, для того, чтобы использовать его, вы должны сначала правильно call настроить его с помощью необходимого параметра.

Подобный этому,

 List myList = _list(snapshot);  // I assume you have access to a snapshot variable
return StaggeredGridView.countBuilder(
  itemCount: myList .length,
  itemBuilder: (BuildContext context, int index) {
  Brand brand = myList.elementAt(index) as Brand;
  return InkWell(
    onTap: () {
      Navigator.of(context).pushNamed('/Brand',
        arguments: new RouteArgument(
        id: myList[index].id
      )
  ..... 
 

Комментарии:

1. вам нужно преобразовать AsyncSnapshot его в QuerySnapshot , позвонив .data по нему. snapshot.data

2. спасибо Нисанту за ваш ответ. к сожалению, снимок сделан с firebase, поэтому я получил этот тип в переменной снимка: «AsyncSnapshot<QuerySnapshot<Объект?><Объект?>>» и когда список myList = _list(снимок); он говорит, что _list не определен

3. Если _list не определено, то у вас нет вашей _list функции в коде виджета curent. Опубликуйте больше в вопросе.

4. вы правы, Нисант, я определил, но теперь ошибка в списке строк myList = _list(snapshot.data); : Выражение не вычисляется для функции, поэтому его нельзя вызвать.

5. Использовать pastebin.com и поделитесь ссылкой после вставки полного кода.