我想使用相同的函数初始化几个最终成员变量。不幸的是,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
}
我绝对需要构造函数为一个常量表达式(以保持与现有第三方库代码的兼容性)。 我能想到的唯一解决方法是重复将整个函数主体复制并粘贴到初始化程序列表中。 我已经看到了一些flutter库中使用的这种反模式。我还是宁愿避免这种情况。 有人知道更干净的解决方案吗?
答案 0 :(得分:0)
答案 1 :(得分:0)
用私有构造函数定义工厂函数怎么样?
Foo._privateConstructor(int a, int b, int c);
然后使用
factory Foo(int rawA, int rawB, int rawC) {
int a = func(rawA);
int b = func(rawB);
int c = func(rawC);
return Foo._privateConstructor(a,b,c);
}