Flutter Classes: Creating, Inheriting, and Implementing Abstract Classes

Ahmed Taha ElElemy
6 min readMar 25, 2023

--

Flutter is an open-source mobile app development framework that allows developers to create beautiful, high-performance mobile applications for iOS and Android using a single codebase. One of the key concepts in Flutter is the use of widgets, which are building blocks for creating user interfaces.

1- Classes in Flutter:

classes are used to define the blueprint for objects. They can contain properties and methods that define the behavior and data of objects. Classes are a fundamental concept in object-oriented programming, which is the paradigm that Flutter uses.

Creating Classes in Flutter

To create a class in Flutter, you start by defining the class name and any properties that you want to include. Here’s an example of a class definition:

class Person {
String name;
int age;

void sayHello() {
print("Hello, my name is $name and I am $age years old");
}
}

In this example, we have defined a class called Person. The Person class has two properties, name and age, and one method called sayHello.

Creating Objects in Flutter

To create an object from a class in Flutter, you use the new keyword followed by the class name and any arguments that the constructor requires. Here's an example of creating an object from the Person class:

Person john = new Person();

In this example, we have created an object called john from the Person class using the new keyword. The Person constructor doesn't require any arguments, so we can create the object without passing any.

Accessing Properties in Flutter

To access the properties of an object in Flutter, you use the dot notation. Here’s an example of accessing the name property of the john object:

john.name = "John Doe";

In this example, we have set the name property of the john object to "John Doe" using the dot notation.

Calling Methods in Flutter

To call a method of an object in Flutter, you also use the dot notation. Here’s an example of calling the sayHello method of the john object:

john.sayHello();

In this example, we have called the sayHello method of the john object using the dot notation.

Inheritance in Flutter

Inheritance is another important concept in Flutter classes. It allows you to create a new class that is a modified version of an existing class. The new class inherits all of the properties and methods of the existing class and can override or add new properties and methods.

To create a class that inherits from an existing class in Flutter, you use the extends keyword followed by the name of the class that you want to inherit from. Here's an example of a Student class that inherits from the Person class:

class Student extends Person {
String school;

void study() {
print("$name is studying at $school");
}
}

In this example, we have created a new class called Student that inherits from the Person class. The Student class has one additional property called school and one additional method called study.

Creating an object from the Student class is the same as creating an object from the Person class:

Student jane = new Student();

In this example, we have created an object called jane from the Student class.

Accessing inherited properties and methods is the same as accessing properties and methods of the original class:

jane.name = "Jane Doe";
jane.age = 20;
jane.school = "University of XYZ";
jane.sayHello();
jane.study();

In this example, we have set the name, age, and school properties of the jane object and called the `sayHello and study methods using the dot notation.

Classes are a fundamental concept in object-oriented programming, and they are used extensively in Flutter development. In this article, we have covered the basics of creating classes, creating objects from classes, accessing properties and methods of objects, and inheritance in Flutter.

By understanding these concepts, you can create more complex and robust Flutter applications that are easier to maintain and modify over time.

Abstract class in Flutter

In Flutter, the Abstract class is a special type of class that cannot be instantiated directly. Instead, it is used as a blueprint or a base class that other classes can extend to inherit its properties and methods.

The main purpose of an abstract class in Flutter is to provide a template for other classes to follow. It defines a set of methods and properties that must be implemented by any class that extends it. Abstract classes are useful when you want to create a common interface for a group of related classes. By defining a common set of methods and properties, you can make it easier to work with these classes and ensure that they all adhere to a consistent API.

Here’s an example of how you can create an abstract class in Flutter:

abstract class Animal {
String name;
  void makeSound();  void move();
}

In this example, we have defined an abstract class called Animal. The Animal class has two abstract methods: makeSound and move. Any class that extends the Animal class must implement these two methods.

Now let’s create a class that extends the Animal class:

class Cat extends Animal {
@override
void makeSound() {
print('Meow');
}
  @override
void move() {
print('Running');
}
}

In this example, we have created a class called Cat that extends the Animal class. The Cat class must implement the makeSound and move methods defined in the Animal class.

Using abstract classes in Flutter can help you create more modular and reusable code. By defining a common interface for a group of related classes, you can make it easier to work with these classes and ensure that they all adhere to a consistent API.

Let’s take another example to understand the usage of abstract classes in Flutter in a better way.

Suppose you are building a music app, and you want to create a set of classes for different types of audio players. You might have classes for an MP3 player, a streaming audio player, and a radio player. Each of these classes will have different methods and properties, but they will all have some common methods, such as play, pause, stop, and seek.

To create a common interface for these classes, you can define an abstract class called AudioPlayer:

abstract class AudioPlayer {
void play();
  void pause();  void stop();  void seek(Duration position);
}

In this example, we have defined an abstract class called AudioPlayer. The AudioPlayer class has four abstract methods: play, pause, stop, and seek. Any class that extends the AudioPlayer class must implement these four methods.

Now let’s create a class that extends the AudioPlayer class:

class Mp3Player extends AudioPlayer {
@override
void play() {
// Code to start playing an MP3 file
}
  @override
void pause() {
// Code to pause an MP3 file
}
@override
void stop() {
// Code to stop playing an MP3 file
}
@override
void seek(Duration position) {
// Code to seek to a specific position in an MP3 file
}
}

In this example, we have created a class called Mp3Player that extends the AudioPlayer class. The Mp3Player class must implement the play, pause, stop, and seek methods defined in the AudioPlayer class.

Using abstract classes in Flutter can help you create more modular and reusable code. It provides a clear and consistent interface for a group of related classes, and it ensures that each class adheres to the same API. By using abstract classes, you can improve the organization and maintainability of your codebase.

Interfaces in flutter

Flutter, like Dart in general, does not have built-in support for interfaces as a separate language feature. Instead, Dart provides a mechanism called “abstract classes” that can be used to achieve similar functionality to interfaces.

Abstract classes in Dart are similar to regular classes, but they cannot be directly instantiated. Instead, they are used as a blueprint for other classes to implement their functionality. Abstract classes can define abstract methods, which are methods that do not have an implementation and must be overridden by any classes that implement the abstract class.

Here is an example of an abstract class in Flutter that defines an interface for a Calculator

abstract class Calculator {
int add(int a, int b);
int subtract(int a, int b);
}

In this example, the Calculator class is an abstract class that defines two abstract methods: add and subtract. Any class that implements the Calculator interface must provide an implementation for both of these methods.

Here’s an example of a class that implements the Calculator interface:

class BasicCalculator implements Calculator {
int add(int a, int b) {
return a + b;
}

int subtract(int a, int b) {
return a - b;
}
}

In this example, the BasicCalculator class implements the Calculator interface by providing an implementation for the add and subtract methods. Because BasicCalculator implements the Calculator interface, it must provide an implementation for both methods defined in the interface.

Using abstract classes to define interfaces in Flutter can be a useful way to ensure that classes implement a specific set of methods. However, it’s worth noting that Dart also supports mixins, which are another mechanism for sharing functionality between classes. Mixins allow you to reuse code across multiple classes without needing to create a separate abstract class interface.

--

--

Ahmed Taha ElElemy

Passionate Flutter dev & tech enthusiast. Collaborative problem-solver, eager to create innovative solutions. Let's code and build together!