提问人:Walrus 提问时间:10/16/2022 更新时间:1/16/2023 访问量:713
Flutter apply 方法到静态变量
Flutter apply method to static variable
问:
如何将方法应用于类中的静态变量。flutter 中的某些内置类似乎可以做这样的事情。
class UITextStyle {
static const TextStyle body = TextStyle(fontSize: 17);
addColor(Color color) {
TextStyle style = this as TextStyle;
style.merge(TextStyle(color: color));
}
}
然后可以这样称呼:
UITextStyle.body.addColor(Color.fromRGBA(0,0,0,1));
但是,我不能这样调用该方法,因为首先它不是静态的,其次,如果是静态的,我将无法在首先声明后调用它,而只能在 调用它。.body
UITextStyle.addColor(...)
这是如何实现的?
答:
3赞
Walrus
10/16/2022
#1
多亏了@pskink的评论,我最终能够实现这个功能。
class UITextStyle {
const UITextStyle(this.style);
final TextStyle style;
static const body = UITextStyle(TextStyle(fontSize: 17));
addColor(Color color) {
TextStyle textStyle = style;
return textStyle.merge(TextStyle(color: color));
}
}
3赞
Ahmad Ellamey
10/16/2022
#2
你可以试试这个方案,关键是addColor函数没有定义到TextStyle类型,所以要达到这个目的,你需要通过这个扩展将这个函数添加到TextStyle类中:
extension TextStyleEx on TextStyle{
TextStyle addColor(Color color) {
return merge(TextStyle(color: color,fontWeight: FontWeight.w600));
}
}
并使此方法返回 TextStyle,以便您可以从合并的实例中获取实例,因为您的静态对象是最终的,因此您无法接收到它的新值。
就这样离开你的班级
class UITextStyle { static const TextStyle body = TextStyle(fontSize: 17); }
使用此类和保存的静态对象获取具有旧 TextStyle 和新 TextStyle 的新 TextStyle。
为了在 main 中测试运行 this,将清除前面的示例:
TextStyle mergedStyles = UITextStyl.body.addColor(Colors.black); print(mergedStyles);
2赞
icnahom
10/17/2022
#3
在 Dart 中可以有静态成员。extensions
extension UITextStyle on TextStyle {
static const body = TextStyle(fontSize: 17);
TextStyle addColor(Color color) {
return this.merge(TextStyle(color: color));
}
}
UITextStyle.body.addColor(Color.fromRGBO(0, 0, 0, 1));
评论
void main() { Foo.foo.bar('hello world'); } class Foo { static final foo = Foo(); bar(String s) { print(s); } }
const
final