繁体   English   中英

如何重用 Flutter 中的非 Widget 类?

[英]How to reuse non Widget classes in Flutter?

我知道我们应该在 Flutter中使用 inheritance 的合成。 当我们谈论Widgets时,这很有效。

但是,当 class 不是Widget时,我该怎么办? 例如,我希望某些屏幕中的TextFields在其InputDecoration中有一组特定的值。

我应该扩展InputDecoration吗? 如何在许多 TextField 中重用这个特定的InputDecoration

编辑:按照 Rémi Rousselet 的指导,我扩展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);
}

当然。 实际上,“请勿扩展窗口小部件”仅限于此:窗口小部件。

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

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

Flutter中已经有很多示例。 例如, Alignment是的一个子类AlignmentGeometry

我扩展了装饰 class、TextInputFormatter 和 TextFieldValidator class,在前端 UI 开发方面取得了巨大成功,并且易于推荐。

装饰 class 在容器周围放置虚线边框。 TextInputFormatter 用于信用卡号输入 TextFieldValidator 用于信用卡到期日验证。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM