Dart / Flutter 嵌套类静态访问

Posted

技术标签:

【中文标题】Dart / Flutter 嵌套类静态访问【英文标题】:Dart / Flutter nested classes static access 【发布时间】:2021-04-28 10:38:24 【问题描述】:

我正在尝试使用嵌套类的一个版本在 Flutter 中的整个应用程序中创建一个常量字符串树。我希望它们被嵌套,以便随着应用程序的增长快速找到 const 字符串,但仍然具有使用 Text() 小部件的 const 关键字的额外“速度”。

但是,我很难在 const Text() 小部件中使用它们。

这是一个示例:

class Strings 
  static const String ok = 'OK';
  static TechnicianStrings technicianStrings = TechnicianStrings();


class TechnicianStrings 
  TechnicianStrings();
  final String createTech = 'Create Technician';
  final String technician = 'Technician';

在整个应用程序中,我想这样使用这些常量字符串:

const Text(Strings.ok),  // <-- this works
const Text(Strings.technicianStrings.technician), //<-- only works without 'const'
const Text(Strings.technicianStrings.createTech), //<-- only works without 'const'

但是,当我对文本小部件使​​用 const 关键字时,我收到“创建常量的参数必须是常量表达式”的错误。

我尝试为 TechnicianStrings 的成员使用不同的“常量和静态”名称,但文本小部件出现“无效常量”等错误。我还将 TechnicianStrings 定义为静态 const,并在该行中收到“必须使用常量值初始化常量变量”的错误:

static const TechnicianStrings technicianStrings = TechnicianStrings();

有没有办法将这种嵌套类结构与 const Text() 小部件一起使用?

【问题讨论】:

我不确定,但是如果您想将您的应用本地化为另一种语言,那么整个问题就变得毫无意义。那么也许是时候使用本地化系统了? 我不打算对其进行本地化......但也许我会看看本地化包,看看他们是如何做这样的事情的。虽然,使用这种方法可以很容易地进行本地化......只需根据语言选择不同的类结构,不是吗? 【参考方案1】:

TechnicianStrings 中需要一个常量构造函数。

class Strings 
  static const String ok = 'OK';
  static const TechnicianStrings technicianStrings = TechnicianStrings();


class TechnicianStrings 
  const TechnicianStrings(); // <---
  final String createTech = 'Create Technician';
  final String technician = 'Technician';

【讨论】:

以上是关于Dart / Flutter 嵌套类静态访问的主要内容,如果未能解决你的问题,请参考以下文章

使用 Dart 语言解析嵌套 JSON 数组并将其放入模型类中

Java访问静态嵌套类[重复]

java内部类的静态嵌套类

通过对象引用访问实例变量的静态嵌套类的 Java 示例 [重复]

私有的嵌套类(内部或静态)是不是可能具有具有公共访问权限的方法?

从嵌套类的函数访问父级的非静态成员