https://medium.com/@ahmedtahaelelemy/flutter-classes-creating-inheriting-and-implementing-abstract-classes-581a3cb650ce