Dart/Flutter - 访问 mixin 或派生类中的私有成员

问题描述

我想将多余的类成员外包到一个单独的类/mixin 中。对于使用该类/mixin 的每个类,我想单独决定成员是否可以从外部获取和/或设置。

我想要像下面的例子那样的东西,但它不能编译,似乎是因为私有属性在通过 with 派生或添加到类时不可见。

到目前为止,我还没有找到一个合理的解决方案。有什么想法吗?

mixin Person {
  String _firstName;
  String _lastName;
}

class Butcher with Person {
  Butcher({
    String firstName,String lastName,}) :
        _firstName = firstName,_lastName = lastName;

  final String tool = 'knife';
  
  String get firstName => _firstName;
  String get lastName => _lastName;
}

class SecretAgent with Person {
  SecretAgent({
    String firstName,_lastName = lastName;

  final String tool = 'poison';
          
  String get firstName => _firstName;
  String get lastName => _lastName;
  
  set firstName(String value) => _firstName = value;
  set lastName(String value) => _lastName = value;
  
}

解决方法

这与私有成员无关。 Dart 初始化列表只能初始化 那个 类的成员,不能初始化任何基类(包括 mixin)。 (Member initialization from initializer list executes before base class constructors.)

如果您将初始化移动到构造函数体,它应该可以工作:

class Butcher with Person {
  Butcher({
    String firstName,String lastName,}) {
    _firstName = firstName;
    _lastName = lastName;
  }

  ...


class SecretAgent with Person {
  SecretAgent({
    String firstName,}) {
    _firstName = firstName;
    _lastName = lastName;
  }

  ...