#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 и поделитесь ссылкой после вставки полного кода.