【问题标题】:Return a string in a function在函数中返回一个字符串
【发布时间】:2020-11-22 19:58:58
【问题描述】:

我正在处理仓库中的位置管理项目。 此代码检查可用空间。 但我对这段代码有疑问。

当我调用该函数时,它返回一个字符串,但返回“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;
                      },
                    ),
                  ),
                ],
              ),

【问题讨论】:

  • CheckLocation 方法返回什么?
  • 它返回一个带有荷兰语文本“此位置上已经有一个托盘”的字符串。
  • 所有其他返回工作,但这个没有。它认为这是因为这个返回是在 if 语句中。

标签: function flutter dart return flutter-web


【解决方案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 返回后兴奋 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;
}

【讨论】:

  • 感谢您的帮助!您的代码看起来不错。但是,当我调用此代码时,它也会返回所有 checkLocations,但“Locatie is bezet”返回 null。
  • 表示不满足条件或者快照中没有文档
  • 尝试打印文档结果
  • firestoreInstance.collection("Orders").where("locatie", isEqualTo: Location_check).limit(1).get()之前添加等待
  • 我在“return checkLocation”之前添加了“print(checkLocation)”,结果为null。但是当我在“checkLocation=”Locatie is bezet”下面添加“print(”test”) 时,结果是 test。所以代码触发了打印语句。
猜你喜欢
  • 2012-03-30
  • 2021-09-27
  • 2013-04-14
  • 1970-01-01
  • 2020-03-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多