我想使用相同的函数初始化几个最终成员变量。不幸的是,dart不允许在const构造函数的初始化列表中进行函数调用:
int fun(int val) => val + 1;
class Foo {
final int a;
final int b;
final int c;
const Foo(int a, int b, int c)
: a = fun(a), <-- this won't compile because
b = fun(b), <-- the constructor
c = fun(c); <-- is const
}
我绝对需要构造函数是一个常量表达式(为了保持与现有第三方库代码的兼容性)。我能想到的唯一解决方法是反复将整个函数体复制并粘贴到初始化列表中。我已经看到在一些颤动的库中使用了这个反模式。我还是宁愿避免它。有人知道这个问题更清洁的解决方案吗?
我不认为这是可能的。
创建一个任何计算结果的对象使得结果不是const
。
我能想到的唯一解决方案是使用source_gen和build_runner等工具进行代码生成,这样您就可以在编译时执行您的功能。