#function #flutter #dart #return #flutter-web
#функция #flutter #dart #Возврат #flutter-web
Вопрос:
Я работаю над проектом для управления местоположением на складе. Этот код проверяет доступное пространство. Но у меня проблема с этим кодом.
Когда я вызываю функцию, она возвращает строку, но возврат «locatie is bezet» не работает. Почему это?
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:transportmanagement/locations/AvailableLocations.dart';
final firestoreInstance = FirebaseFirestore.instance;
var locations = availableLocations;
Future<String> CheckLocation(Location_check) async{
// This function checks the avalible space in SGF.
String checkLocation;
if (Location_check.isEmpty){
checkLocation= "Vul een locatie in";
// return "Vul een locatie in";
}
else{
if (availableLocations.containsKey(Location_check)) {
// Check if the location is in availablelocations.dart
// Checks if there is already a pallet on this location in Firebase
await firestoreInstance.collection("Orders").where("locatie", isEqualTo: Location_check).limit(1).get().then((querySnapshot) {
querySnapshot.docs.forEach((result) {
//print(result.data());
checkLocation= "Locatie is bezet";
});
});
// return null;
}
else{
checkLocation= "Locatie bestaat niet";
// return "Locatie bestaat niet";
}
}
return checkLocation;
}
Вызов кода:
Row(
mainAxisAlignment: MainAxisAlignment.start,
children: [
Container(
margin: EdgeInsets.fromLTRB(0, 0, 0, 0),
width: 150,
child: TextFormField(
autofocus: true,
obscureText: false,
decoration: InputDecoration(
fillColor: Colors.white, filled: true,
border: OutlineInputBorder(
borderRadius: BorderRadius.all(Radius.circular(0)),
),
),
onSaved: (String value) {
_locatie = value;
},
validator: (value) {
var test = CheckLocation(value);
return test;
},
),
),
],
),
Комментарии:
1. Что возвращает метод CheckLocation?
2. Он возвращает строку с текстом на голландском языке «в этом местоположении уже есть поддон».
3. Все остальные возвраты работают, но этот нет. Я думаю, это потому, что этот возврат находится внутри оператора if.
Ответ №1:
Определите строковую переменную внутри функции, а затем верните переменную
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:transportmanagement/locations/AvailableLocations.dart';
final firestoreInstance = FirebaseFirestore.instance;
var locations = availableLocations;
String CheckLocation(Location_check) {
// This function checks the avalible space in SGF.
String checkLocation;
if (Location_check.isEmpty){
checkLocation= "Vul een locatie in";
// return "Vul een locatie in";
}
else{
if (availableLocations.containsKey(Location_check)) {
// Check if the location is in availablelocations.dart
// Checks if there is already a pallet on this location in Firebase
firestoreInstance.collection("Orders").where("locatie", isEqualTo: Location_check).limit(1).get().then((querySnapshot) {
querySnapshot.docs.forEach((result) {
//print(result.data());
checkLocation= "Locatie is bezet";
});
});
// return null;
}
else{
checkLocation= "Locatie bestaat niet";
// return "Locatie bestaat niet";
}
}
return checkLocation;
}
Я надеюсь, что это полезно
ОБНОВИТЕ переменную querySnapshot.docs.forEach
excite после возврата checkLocation
так что возвращаемое значение null вы должны добавить await
к firestoreInstance.collection("Orders").where("locatie", isEqualTo: Location_check).limit(1).get()
видите, что
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:transportmanagement/locations/AvailableLocations.dart';
final firestoreInstance = FirebaseFirestore.instance;
var locations = availableLocations;
String CheckLocation(Location_check) {
// This function checks the avalible space in SGF.
String checkLocation;
if (Location_check.isEmpty){
checkLocation= "Vul een locatie in";
// return "Vul een locatie in";
}
else{
if (availableLocations.containsKey(Location_check)) {
// Check if the location is in availablelocations.dart
// Checks if there is already a pallet on this location in Firebase
await firestoreInstance.collection("Orders").where("locatie", isEqualTo: Location_check).limit(1).get().then((querySnapshot) {
querySnapshot.docs.forEach((result) {
//print(result.data());
checkLocation= "Locatie is bezet";
});
});
// return null;
}
else{
checkLocation= "Locatie bestaat niet";
// return "Locatie bestaat niet";
}
}
return checkLocation;
}
Комментарии:
1. Спасибо за вашу помощь! Ваш код выглядит хорошо. Но также, когда я вызываю этот код, он возвращает все контрольные местоположения, но «Местоположение не задано» возвращает значение null.
2. Это означает, что условие не выполнено или что в моментальном снимке нет документа
3. попробуйте распечатать результат документа
4. добавить ожидание перед
firestoreInstance.collection("Orders").where("locatie", isEqualTo: Location_check).limit(1).get()
5. Я добавил «print (checkLocation)» перед «return checkLocation», и результат равен нулю. Но когда я добавляю «print («test») под «checkLocation = «Locatie is bezet», результатом является test. Таким образом, код запускает оператор print .