List<Todo> todoFromFirestore(QuerySnapshot snapshot) {
if (snapshot != null) {
return snapshot.docs.map((e) {
return Todo(
isComplet: e.data()["isComplet"],
title: e.data()["title"],
uid: e.id,
);
}).toList();
}
else {
return null;
}
}
этот код работал в firebase_core версии 0.5.3, но сейчас не работает (1.13.1). Ошибка говорит:
Error: The operator '[]' isn't defined for the class 'Object?'.
- 'Object' is from 'dart:core'.
Try correcting the operator to an existing operator, or defining a '[]' operator.
isComplet: e.data()["isComplet"],
^
Error: The value 'null' can't be returned from a function with return type 'List<Todo>' because 'List<Todo>' is not nullable.
- 'List' is from 'dart:core'.
- 'Todo' is from 'package:simplest_todo/model/todo.dart' ('lib/model/todo.dart').
return null;
как я могу исправить этот код или создать новый с той же функцией?
Error: The operator '[]' isn't defined for the class 'Object?'.
- 'Object' is from 'dart:core'. Try correcting the operator to an existing operator, or defining a '[]' operator. isComplet: e.data()["isComplet"],
Ошибка отображается, потому что обновленная библиотека firebase требует, чтобы вы указали тип данных.
Вы можете бросить e.data()
на Map<String, dynamic>
.
Для получения дополнительной информации ознакомьтесь с файлом руководство по миграции.
Измените это:
e.data()["isComplet"]
к этому:
(e.data() as Map<String, dynamic>)["isComplet"]
Error: The value 'null' can't be returned from a function with return type 'List' because 'List' is not nullable.
- 'List' is from 'dart:core'.
- 'Todo' is from 'package:simplest_todo/model/todo.dart' ('lib/model/todo.dart'). return null;
Вы пытаетесь вернуть null из метода с ненулевым типом возвращаемого значения.
Вам нужно сделать возвращаемый тип метода обнуляемым. Вы делаете это, добавляя вопросительный знак (?) после возвращаемого типа.
Для получения дополнительной информации ознакомьтесь с Звук нулевой безопасности | Дартс.
Измените это:
List<Todo> todoFromFirestore(QuerySnapshot snapshot) {
...
}
к этому:
List<Todo>? todoFromFirestore(QuerySnapshot snapshot) {
...
}
Ваш обновленный код будет следующим:
List<Todo>? todoFromFirestore(QuerySnapshot snapshot) {
if (snapshot != null) {
return snapshot.docs.map((e) {
final Map<String, dynamic> data = e.data() as Map<String, dynamic>;
return Todo(
isComplet: data["isComplet"],
title: data["title"],
uid: e.id,
);
}).toList();
}
else {
return null;
}
}