How to reuse non Widget classes in Flutter?
Sure. The "don't extend widgets" is really limited to that: widgets.
The real reason behind that "limitation" is that extending widgets do not allow to properly change the style of a widget, due to how build
works. So extending widgets do not make sense.
But that reason does not apply to other kinds of objects. So don't worry and go ahead!
There are many examples available in Flutter already. For example, Alignment
is a subclass of AlignmentGeometry
.
Rod
Updated on December 13, 2022Comments
-
Rod over 1 year
I know we are supposed to use composition over inheritance in Flutter. And that works great when we are talking about
Widgets
.But what am I supposed to do when a class is not a
Widget
? For example, I want myTextFields
in some screens to have a specific set of values in theirInputDecoration
.Should I extend
InputDecoration
? How can I reuse this specificInputDecoration
in many TextFields?EDIT: Following Rémi Rousselet's guidance, I extended
InputDecoration
. Here's the final result: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); }
-
Rod almost 5 yearsThanks! You are right, I managed to solve this using inheritance. I'll update my question with some code to show it.