#flutter #flutter-dependencies
Вопрос:
Я работаю над приложением для упражнений. Я использую FIREBASE с StreamBuilder для получения «идентификатора упражнения», который был выбран в моем приложении. Это работает нормально, и я получаю правильный идентификатор. Затем я передаю его простому методу, чтобы получить фактическое «упражнение», чтобы я мог его отобразить. Этот метод проходит через список упражнений, проверяя, найден ли идентификатор упражнения, а затем я хочу, чтобы он вернул упражнение. Однако я всегда возвращаю значение null. Я не могу понять, почему это так.
Я был бы очень признателен за некоторую помощь, так как сейчас очень занят этим.
Вот ниже мой код:
Это и есть метод:
Exercise getExerciseByID(String exerciseId) { _exercises.forEach((exercise) { print('COMPARE1: ${exercise.id} AND $exerciseId'); if (exercise.id == exerciseId) { print('COMPARE2: ${exercise.id} AND ${exerciseId}'); return exercise; } }); }
Обратите внимание, что две инструкции печати печатают и отображают соответствующие идентификаторы
А вот сборка с помощью StreamBuilder и т. Д..
return Scaffold( body: StreamBuilder( stream: FirebaseFirestore.instance .collection('favorites') .doc('${_firebaseAuth.currentUser.uid}') .collection('userFavorites') .snapshots(), builder: (BuildContext context, AsyncSnapshotlt;QuerySnapshotgt; snapshot) { if (!snapshot.hasData) return Center( child: CircularProgressIndicator(), ); return ListView.builder( itemCount: snapshot.data.docs.length, itemBuilder: (context, index) { //TODO: GET EXERCISE FOR DOC String _exerciseId = snapshot.data.docs[index].id; _exercise = getExerciseByID(_exerciseId); //TODO: DISPLAY CARD print("Retrieved Exercise: $_exercise"); return Center(child: Text("")); }, ); }, // padding: EdgeInsets.only(left: sideMargin), // }, ), );
Примечание: оператор печати: печать(«Извлеченное упражнение: $_exercise»); — это то, где я всегда нахожу НУЛЬ.
Большое спасибо за любую помощь.
Комментарии:
1. РЕДАКТИРОВАТЬ: Я понял, что вы используете данные JSON, можете ли вы показать, как использовать для этого модель? Возможно, вы неправильно анализируете данные JSON.
Ответ №1:
измените это
Exercise getExerciseByID(String exerciseId) { _exercises.forEach((exercise) { print('COMPARE1: ${exercise.id} AND $exerciseId'); if (exercise.id == exerciseId) { print('COMPARE2: ${exercise.id} AND ${exerciseId}'); return exercise; } }); }
к этому
Exercise getExerciseByID(String exerciseId) { Exercise returningExercise; _exercises.forEach((exercise) { print('COMPARE1: ${exercise.id} AND $exerciseId'); if (exercise.id == exerciseId) { print('COMPARE2: ${exercise.id} AND ${exerciseId}'); returningExercise = exercise; } }); return returningExercise; }
Вы возвращаетесь внутрь инструкции ForEach. Это не возвращает вас к вашей функции. поместите оператор return вне оператора ForEach.
Примечание: Это решение не самое лучшее. Но теперь ты знаешь, что происходит не так.
Комментарии:
1. Привет @Kaustuv Праджапати, большое спасибо, это имеет смысл. Не могли бы вы сказать мне, что вы подразумеваете под «Это решение не самое лучшее», пожалуйста? Спасибо
2. о, неважно, у меня на уме было другое, что, как я теперь понимаю, не связано с этим.. gt;_gt;