【问题标题】:Dart Abstract Class Method with @required optimal parameters带有@required最佳参数的Dart抽象类方法
【发布时间】:2020-08-21 12:17:57
【问题描述】:

如何在抽象类中使用@required注解? SubjectVM.dart 上没有错误。我希望它是@required 自动的

import 'package:flutter/material.dart';
import 'package:todo/models/subject.dart';

abstract class SubjectBase {
  void addSubject(Subject value);
  void deleteSubject(Subject value);
  void deleteSubjectByIndex(int index);
  void updateSubject({@required Subject updatedSubject, @required int indexToReplace});
}

SubjectVM.dart

class SubjectVM implements SubjectBase {
  List<Subject> listOfSubjects = <Subject>[];

  @override
  void addSubject(Subject value) {
    // TODO: implement addSubject
  }

  @override
  void deleteSubject(Subject value) {
    // TODO: implement deleteSubject
  }

  @override
  void deleteSubjectByIndex(int index) {
    // TODO: implement deleteSubjectByIndex
  }

  @override
  void updateSubject({Subject updatedSubject, int indexToReplace}) {
    // TODO: implement updateSubject
  }

}

SubjectVM 没有错误消息。我可以不带参数使用,但我不想要它

SubjectVM subjectVM =  SubjectVM() 
subjectVM.updateSubject();

我想将它与@reqiured 命名参数一起使用。如果我将@required 注释添加到SubjectVM.updateSubject,我可以做到这一点。但它的手动方式。有什么建议吗?

【问题讨论】:

    标签: flutter dart named-parameters


    【解决方案1】:

    您的@required 注释与SubjectBase 类相关,而不是与SubjectVM 相关。如果需要这些注解起作用,则需要执行 SubjectBase 的一个方法。这个类是抽象的,没有实现,但是你可以使用子类的实现。

    试试这个:

    SubjectBase subjectVM =  SubjectVM();
    subjectVM.updateSubject();
    

    【讨论】:

    • 感谢您的回复,但它不起作用,我不想使用这种方法。我可以使用 subjectVM.updateSubject();没有错误。但它错了,我想将它与命名参数一起使用,并且这个命名参数是必需的。
    • 在我的示例中,来自 SubjectVM 的方法 updateSubject 正在使用来自 SubjectBase 的错误,并且没有必要按照您的要求再次添加注释。如果我正确理解了您的要求。如果你运行 flutter analyze,在我的例子中,你会得到错误:"The parameter 'indexToReplace' is required" and "The parameter 'updateSubject' is required ",如果你执行代码,方法SubjectVM.updateSubject会被执行
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多