我知道我们应该在Flutter中使用composition over inheritance。当我们谈论Widgets
时,效果很好。
但是,如果一个班级不是Widget
时我该怎么办?
例如,我希望我的TextFields
在某些屏幕中的InputDecoration
中具有一组特定的值。
我应该扩展InputDecoration
吗?如何在许多TextField中重用此特定的InputDecoration
?
编辑:
在RémiRousselet的指导下,我扩展了InputDecoration
。这是最终结果:
class LoginInputDecoration extends InputDecoration {
@override
InputBorder get errorBorder =>
UnderlineInputBorder(borderSide: BorderSide(color: AppColors.danger));
@override
EdgeInsetsGeometry get contentPadding => const EdgeInsets.symmetric(
horizontal: Dimens.halfSpace,
vertical: Dimens.singleSpace,
);
@override
InputBorder get border =>
UnderlineInputBorder(borderSide: BorderSide(color: AppColors.primary));
@override
TextStyle get labelStyle =>
TextStyle(color: AppColors.white, decorationColor: AppColors.white);
@override
InputBorder get enabledBorder =>
UnderlineInputBorder(borderSide: BorderSide(color: AppColors.primary));
@override
TextStyle get hintStyle =>
TextStyle(color: AppColors.white, decorationColor: AppColors.white);
LoginInputDecoration({String labelText}) : super(labelText: labelText);
}
答案 0 :(得分:1)
好的。实际上,“请勿扩展小部件”仅限于此:小部件。
该“限制”背后的真正原因是,由于build
的工作原理,扩展的窗口小部件不允许正确地更改窗口小部件的样式。因此扩展小部件没有意义。
但是那个原因不适用于其他类型的对象。所以别担心,继续吧!
Flutter中已经有很多示例。例如,Alignment
是AlignmentGeometry
的子类。