我试图通过扩展 Flutter 来修改 UnderlineInputBorder 的行为。 但 Flutter 总是调用父类(super class) (UnderlineInputBorder) 的 draw() 方法而不是我的 _PremiseInputBorder,如下所示。
TextField 小部件的代码:
TextField(
decoration: InputDecoration(
contentPadding: EdgeInsets.zero,
border: _PremiseInputBorder()),
)
我的自定义边框类的代码:
class _PremiseInputBorder extends UnderlineInputBorder {
const _PremiseInputBorder() : super();
@override
void paint(Canvas canvas, Rect rect, {
double gapStart,
double gapExtent = 0.0,
double gapPercentage = 0.0,
TextDirection textDirection,}) {
if (borderRadius.bottomLeft != Radius.zero ||
borderRadius.bottomRight != Radius.zero)
canvas.clipPath(getOuterPath(rect, textDirection: textDirection));
Offset leftRect = Offset(rect.left, rect.bottom - 5.0);
Offset rightRect = Offset(rect.right, rect.bottom - 5.0);
canvas.drawLine(leftRect, rightRect, borderSide.toPaint());
}
}
最佳答案
UnderlineInputBorder
有
@override
UnderlineInputBorder copyWith({ BorderSide borderSide, BorderRadius borderRadius }) {
return UnderlineInputBorder(
borderSide: borderSide ?? this.borderSide,
borderRadius: borderRadius ?? this.borderRadius,
);
}
即使您扩展类,它也会返回一个 UnderlineInputBorder
。
如果添加到_PremiseInputBorder
@override
UnderlineInputBorder copyWith(
{BorderSide borderSide, BorderRadius borderRadius}) {
return _PremiseInputBorder();
}
它将调用您的paint()
方法。
还有其他方法可以做类似的事情,例如 scale()
、lerpFrom()
、lerpTo()
但它们没有被调用你的简单例子。
您还需要覆盖这些以使其适用于所有场景。
关于dart - 扩展 Google Flutter 中的 UnderlineInputBorder 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53095228/