ФЛАТТЕР: возвращаемое значение равно НУЛЮ

#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;