Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
dart中类似于JS中键入的函数如何返回_Dart - Fatal编程技术网

dart中类似于JS中键入的函数如何返回

dart中类似于JS中键入的函数如何返回,dart,Dart,在Javascript中,当我想要结束一个函数时,我通常会写return,但在dart中,如果我这样做,那么函数会在每个分支的末尾请求一个return语句,这很混乱 Function createCategory(File image) { String title = _categoryTitle.value; if(image == null || title == null || title.length == 0) { return null; }

Javascript
中,当我想要结束一个函数时,我通常会写return,但在dart中,如果我这样做,那么函数会在每个分支的末尾请求一个return语句,这很混乱

Function createCategory(File image) {
    String title = _categoryTitle.value;
    if(image == null || title == null || title.length == 0) {
      return null;
    }
    CategoryModel newCategory = new CategoryModel();
    if(_categories.value == null) {
      _categories.sink.add([newCategory]);
    }
    return null;
  }

在dart中,正确的方法是什么

您可以这样做:

void createCategory(File image) {
    String title = _categoryTitle.value;

    if (image != null && title.isNotEmpty && _categories.value == null) {
        _categories.sink.add([CategoryModel()]);
    }
}

您可以这样做:

void createCategory(File image) {
    String title = _categoryTitle.value;

    if (image != null && title.isNotEmpty && _categories.value == null) {
        _categories.sink.add([CategoryModel()]);
    }
}

我认为您的困惑来自于您的方法是有效的Dart代码,但并没有真正做到我猜您所想的。您的方法具有以下签名:

Function createCategory(File image) {
这意味着您的方法名为
createCategory
,采用
File
类型的一个参数,并返回一个
函数
。由于您已将方法标记为返回
函数
,因此Dart将告诉您,如果您只是返回
函数,则会出现问题
如果您的方法不返回任何值,那么您希望使用返回类型
void
来标记它,如:

void createCategory(File image) {
  String title = _categoryTitle.value;
  if (image == null || title == null || title.length == 0) {
    return;
  }
  CategoryModel newCategory = new CategoryModel();
  if (_categories.value == null) {
    _categories.sink.add([newCategory]);
  }
  return;
}

我应该注意,最后一个
返回可以跳过,因为Dart将自动添加
返回

我认为您的混淆是因为您的方法是有效的Dart代码,但实际上并没有达到我猜您所想的效果。您的方法具有以下签名:

Function createCategory(File image) {
这意味着您的方法名为
createCategory
,采用
File
类型的一个参数,并返回一个
函数
。由于您已将方法标记为返回
函数
,因此Dart将告诉您,如果您只是返回
函数,则会出现问题
如果您的方法不返回任何值,那么您希望使用返回类型
void
来标记它,如:

void createCategory(File image) {
  String title = _categoryTitle.value;
  if (image == null || title == null || title.length == 0) {
    return;
  }
  CategoryModel newCategory = new CategoryModel();
  if (_categories.value == null) {
    _categories.sink.add([newCategory]);
  }
  return;
}

我应该注意,最后一个
返回可以跳过,因为Dart将自动添加
返回

谢谢,我知道我可以这样做,但当存在多个if语句且我希望避免使用else块时,问题就会出现。问题的关键是如何中断函数,而不是如何在不中断函数的情况下编写函数function@AdamKatz当然可以。:)谢谢,我知道我可以这样做,但问题是当有多个if语句时,我想避免使用else块。问题的关键是如何中断函数,而不是如何在不中断函数的情况下编写函数function@AdamKatz当然可以。:)感谢移除函数并添加void使其像我期望的那样工作感谢移除函数并添加void使其像我期望的那样工作