dart 通过构造函数传入的属性是否应该在Flutter Widgets上是私有的?

w6mmgewl  于 2023-06-03  发布在  Flutter
关注(0)|答案(1)|浏览(221)

“接口隔离”原则(SOLID中的I)告诉我们要尽可能地保持类的API小。遵循这个原则,我认为如果Widget上的属性不需要在Widget外部访问,那么您应该将它们设置为私有。
在Flutter中,你不能用_在构造函数中定义一个命名属性,所以以下是不可能的:

// throws: Named parameters can't start with an underscore.
String _somePrivateProperty;
Foo({required this._somePrivateProperty})

你可以通过使属性定位来解决这个问题,或者,你可以使用构造函数列表,如下所示:

String _somePrivateProperty;
Foo({required String somePrivateProperty}) : _somePrivateProperty = somePrivateProperty;

以下是我的问题:我很少看到Flutter示例代码通过构造函数传递属性。为什么,是不是Dart的工作原理让这个显得多余了?如果不是,那么我遵循SOLID原则并使用构造函数列表通过构造函数初始化私有属性是正确的吗?

fnvucqvd

fnvucqvd1#

下面是我使用SOLID原则做一些网络工作的代码

class AddressDateLogic {
    AddressDateLogic({
      required this.apiLayer,
      required this.responseValidator,
    });

    /// PROPERTIES

    HttpApi apiLayer;
    IResponseValidator responseValidator;

    /// METHODS

    Future<void> getAllAddresses(
        String authToken,
        Function(bool isSuccess, String? errorMessage, List<AddressModel> data)
            onResponse) async {
      /// API CALLBACK

      var validator = responseValidator.validateResponse(
        response: await apiLayer.getHttp(
            endPoint: ApiEndpoints.getAllAddress,
            headers: {"authorization": "Bearer $authToken"}),
      );

      if (validator.status == ResponseStatus.success) {
        List<dynamic> allAddresses = validator.data!['data'];
        List<AddressModel> addresses = [];
        for (var element in allAddresses) {
          addresses.add(
            AddressModel.fromJson(element)..active = element['is_active'],
          );
        }

        onResponse(true, null, addresses);
      } else {
        onResponse(false, validator.errorMessage, []);
      }
    }
  }

你可以从这里了解依赖注入原理。

相关问题