首页 > 解决方案 > 哪个更好的静态函数返回小部件或无状态小部件

问题描述

从标题中可以清楚地看出,哪种方法更好,类中的静态函数返回自定义小部件,还是无状态小部件类?

静态函数的示例返回自定义小部件:

class FormComponent {
  static Widget defaultFromField(
      {@required TextEditingController controller,
      @required TextInputType textInputType,
      @required Icon prefixIcon,
      Icon suffixIcon,
      Function suffixIconPressed,
      @required Function validate,
      Function onTap,
      Function onChange,
      bool isObscureText = false,
      @required String labelText,
      o}) {
    return TextFormField(
      controller: controller,
      keyboardType: textInputType,
      obscureText: isObscureText,
      validator: validate,
      onTap: onTap,
      onChanged: onChange,
      decoration: InputDecoration(
          prefixIcon: prefixIcon,
          suffixIcon: (suffixIcon != null)
              ? IconButton(onPressed: suffixIconPressed, icon: suffixIcon)
              : null,
          labelText: labelText,
          labelStyle: const TextStyle(fontSize: AppDimensions.fontSize_18),
          border: const OutlineInputBorder()),
    );
  }
}

无状态小部件类的示例:

class DefaultFormField extends StatelessWidget {
  final TextEditingController controller;
  final TextInputType textInputType;
  final Icon prefixIcon;
  final Icon suffixIcon;
  final Function suffixIconPressed;
  final Function validate;
  final Function onTap;
  final Function onChange;

  final bool isObscureText = false;
  final String labelText;

  const DefaultFormField({
    Key key,
    this.controller,
    this.textInputType,
    this.prefixIcon,
    this.suffixIcon,
    this.suffixIconPressed,
    this.validate,
    this.onTap,
    this.onChange,
    this.labelText,
  }) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return TextFormField(
      controller: controller,
      keyboardType: textInputType,
      obscureText: isObscureText,
      validator: validate,
      onTap: onTap,
      onChanged: onChange,
      decoration: InputDecoration(
          prefixIcon: prefixIcon,
          suffixIcon: (suffixIcon != null)
              ? IconButton(onPressed: suffixIconPressed, icon: suffixIcon)
              : null,
          labelText: labelText,
          labelStyle: const TextStyle(fontSize: AppDimensions.fontSize_18),
          border: const OutlineInputBorder()),
    );
  }
}

标签: flutterperformancewidgetstateless

解决方案


推荐阅读