Flutter StreamBuilder после ненулевой миграции

avatar
Michael
8 августа 2021 в 16:07
80
1
-3

У меня уйма времени на попытку миграции, и я застрял на StreamBuilder. Ошибка The operator '[]' isn't defined for the class 'Object'. Вот мой код, который работал до миграции:

          StreamBuilder(
              stream: userCollection
                  .doc(_uid)
                  .collection('lists')
                  .doc(itemID)
                  .snapshots(),
              builder: (context, snapshot) {
                switch (snapshot.connectionState) {
                  case ConnectionState.none:
                  case ConnectionState.waiting:
                    return Center(child: CircularProgressIndicator());
                    break;
                  default:
                  // Completed with error
                    if (snapshot.hasError)
                      return Text(snapshot.error.toString());
                    // Completed with data
                    var itemDocument = snapshot.data!;
                    if(snapshot.data == null)
                      return CircularProgressIndicator();

                    itemCategory = itemDocument!['category'] ?? ''; // <- ERROR HERE
                    itemTitleController.text = itemDocument!['title'] ?? '';  // <- ERROR HERE
                    _itemImportant = itemDocument!['important'] ?? false;  // <- ERROR HERE
Источник
Mariano Zorrilla
8 августа 2021 в 16:12
0

Вы распечатываете/записываете, какой itemDocument на самом деле возвращает, вместо того, чтобы предполагать, что 100% - это карта?

Michael
8 августа 2021 в 16:21
0

Я пока ничего не могу распечатать, потому что у меня миллион ошибок, которые не позволяют запустить сборку.

Mariano Zorrilla
8 августа 2021 в 16:23
0

Тогда вы должны исправить это в первую очередь. Откуда вы знаете, что на самом деле выдает ошибку, если код не собирается? Если код строится, и вы действительно получаете сообщение об ошибке, то вы сможете распечатать это значение. Если нет, проверьте, что вам говорит IDE.

Michael
8 августа 2021 в 16:30
0

Мне не нужно было обновлять приложение полтора года, а теперь я столкнулся со всеми этими изменениями. Обновил IDE, флаттер, дротик, все пакеты и т. д. теперь мне нужно сделать все не нулевым. Я просматриваю и исправляю все одно за другим, а до тех пор я продолжаю получать BUILD FAILED с исключениями... Думаю, я вернусь к этому позже. Думал, может быть что-то, что я пропустил, было легко замечено. Спасибо за попытку помочь.

Mariano Zorrilla
8 августа 2021 в 16:43
1

При выполнении миграции с нулевой безопасностью лучше прокомментировать строки, которые дают вам ошибку, и исправить все остальное. Как только вы убедитесь, что код компилируется, вы можете вернуться к этой ошибке и убедиться, что больше ничего не ломается. Фактическая ошибка может быть любой, поскольку флаттер сломается в середине компиляции, потому что он не уверен из-за множества разных проблем.

Ответы (1)

avatar
Anas Nadeem
8 августа 2021 в 16:35
0

Заменить

var itemDocument = snapshot.data!;

С

DocumentSnapshot itemDocument = snapshot.data!;

затем

itemDocument.get('category')
Mariano Zorrilla
8 августа 2021 в 16:45
0

Не могли бы вы объяснить свой ответ? Вы не даете дополнительного контекста о том, почему это должно работать, поскольку проблема больше, чем просто вызов метода. Кроме того, он использует «var», поэтому будет предполагаться динамический, а «.get» не будет допустимым методом для вызова (с исключением, если это так).

Anas Nadeem
8 августа 2021 в 16:48
0

в параметре «поток» StreamBuilder он назначил моментальный снимок firebase firestore.

Mariano Zorrilla
8 августа 2021 в 16:51
0

Его StreamBuilder не использует какие-либо дженерики <Class>. И, опять же... его проблемы больше, чем эта строка, он находится в середине миграции с нулевой безопасностью, и ваш «ответ» не добавляет никаких сведений о том, как это должно исправить.

Anas Nadeem
8 августа 2021 в 16:56
0

Я думаю, что он использовал старую версию плагина firebase_firestore, snapshot.data не возвращает карту

Mariano Zorrilla
8 августа 2021 в 17:06
0

опять же вы предполагаете.