如何在Flutter中重用非Widget类?

时间:2019-08-09 12:47:16

标签: inheritance flutter dart

我知道我们应该在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);
}

1 个答案:

答案 0 :(得分:1)

好的。实际上,“请勿扩展小部件”仅限于此:小部件。

该“限制”背后的真正原因是,由于build的工作原理,扩展的窗口小部件不允许正确地更改窗口小部件的样式。因此扩展小部件没有意义。

但是那个原因不适用于其他类型的对象。所以别担心,继续吧!

Flutter中已经有很多示例。例如,AlignmentAlignmentGeometry的子类。