Функция Dart возвращает значение null

#android #flutter #dart

#Android #флаттер #dart

Вопрос:

У меня есть функция, которая вызывает запрос на создание нового ученика на сервере

 createStudents(String studentName) async {
await Webservice()
    .postReq(new API().createNewStudent(context), studentName)
    .then((value) {
  if (value is Students) {
    Students std = value;
    helper.initializeDatabase();
    helper.insertStudents(std);
    return "Sucessfull";
  } else {
    return value;
  }
});
 

}

в этом примере я отправил имя студента, и на сервере создается новый студент.

в случае успеха она возвращает объект student.

и если это не удается, возвращается сообщение.

я отладил и проверил значение в этой функции, но оно всегда возвращает значение null.

при успешном выполнении он возвращает объект Student, но функция createStudents возвращает значение null. то же самое для сообщения об ошибке

 var ab = await createTags(data);
                  print(ab);
 

ab всегда равно null .

я не знаю, почему он всегда возвращает null.

Ответ №1:

Я не уверен на 100%, но я предполагаю, что вы забыли оператор «return»

 createStudents(String studentName) async {
    //Here should be return
    final value = await Webservice()
        .postReq(new API().createNewStudent(context), studentName);
        
      if (value is Students) {
        Students std = value;
        helper.initializeDatabase();
        helper.insertStudents(std);
        return "Sucessfull";
      } else {
        return value;
      }
 }
 

Комментарии:

1. конечно, но реальный вопрос в том, почему он использует оба then и await ? это можно было бы значительно упростить, используя только await материал

2. именно это я и имел в виду

3. существует if else , поэтому он должен возвращаться в любом случае. я проверил, что он возвращает, но когда я его ловлю, он выдает null

4. @UmeshChakradhar нет, вы возвращаете значение из then обратного вызова, а не из своей функции — проверьте ответ, как это должно быть сделано, используя только await материал (а не комбинацию await и then )

5. @UmeshChakradhar вы можете, но ваш код будет более сложным, и, что еще хуже, у вас может быть больше «глупых» ошибок, как в вашем вопросе — сначала все выглядит нормально (вы возвращаете значение), но все равно null возвращается