【问题标题】:Dart class dot notation like JS objectsDart 类点表示法,如 JS 对象
【发布时间】:2020-03-10 08:54:31
【问题描述】:

由于 React Native 的不稳定性,我们切换到了 Flutter。我无法形容使用稳定资源工作的快乐。

我在 React Native 中为自己创建了一个结构。通过在组件的主要类下创建静态,我能够在 JSX 和函数中使用“点”表示法访问页面。嫌疑人有多健康。像这样:<Component.Form.Input />

由于 darts 纯粹是一种对象语言,我找不到这种结构的示例。即使我将根类元素的静态设计与“单例”设计模式连接到实例,我也无法访问链接类下面的方法。

Helpers.Responsive.calcSome(params..)

在上面的例子中,Helper 是一个类,Responsive 是一个单独的类,Helper 是作为静态变量导入并赋值的。 calcSome 函数是 Responsive 类的一个方法。我怎样才能用 Dart 做到这一点?

这正是我想要做的。您可以将彼此视为一个链式类。

当然,我不知道这种方法对于干净的代码有多健康。

如果您有不同的方法可以以这种方式工作,请分享作为替代方法。我知道我应该如何进行。

感谢您的关注。

【问题讨论】:

    标签: oop dart


    【解决方案1】:

    TL;DR:在您的情况下不可能或没有用处。 Namespaces don't exist per se in Dart

    加长版

    • 只有变量或方法可以点访问。请参阅 ClassesOperators 的文档。
    • 为了能够使用a.b.c,我能想到的唯一方法是将b 定义为带有getter 的静态成员,它返回一个实例化的类。这通常对单身人士很有帮助,例如在 Firebase 中使用:
    class FirebaseAuth {
      // ...
      static FirebaseAuth get instance {
        FirebaseApp defaultAppInstance = Firebase.app();
    
        if (!_firebaseAuthInstances.containsKey(defaultAppInstance.name)) {
          _firebaseAuthInstances[defaultAppInstance.name] = FirebaseAuth._(
            app: Firebase.app(),
          );
        }
    
        return _firebaseAuthInstances[defaultAppInstance.name];
      }
      // ...
    }
    

    推荐

    在您的特定情况下,我将在helpers/responsive.dart 文件中定义calcSome。如果你有很多不同的助手,你可以用它来做一个库。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-01-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多