Useful Classes

Package with useful classes to assist in creating other packages and applications.


This package was developed with the intention of maintaining useful classes that are used in other packages, to avoid replicating copies of the same classes.

How to install

Add the dependency on pubspec.yaml.

Informing ^ at the beginning of the version, you will receive all updates that are made from version 2.0.0 up to the version before 3.0.0.

  useful_classes: ^2.0.0

Import the package in the source code.

import 'package:useful_classes/useful_classes.dart';

Basic Model

BasicModel is very useful for classes that need to be created from a JSON (on the flutter a JSON is a field and value map) or write a JSON from the instance data.

In the example below, a class with the name UserModel will be created, after that an example of how to create the class from a JSON will be shown and after generating JSON again based on the data contained in the class instance.

Class implementation

class UserModel extends BasicModel {
  int id;
  String name;
  String email;
  String phoneNumber;

  UserModel() : super();  
  UserModel.fromJson(json) : super.fromJson(json);

  void readValues() {
    super.readValues(); = readValue<int>('id'); = readValue<String>('name'); = readValue<String>('email');
    this.phoneNumber = readValue<String>('phone_number');

  void writeValues(bool exportOnlyChanged, bool ignoreNulls) {
    writeValue('phone_number', this.phoneNumber);

Import the class based on a JSON

Map<String, dynamic> json = {
  'id': 1,
  'name': 'Darth Vader',
  'email': 'darth.vader@sith.galaxy',
  'phone_number': '547889633245'

UserModel user = UserModel.fromJson(json);

Generate JSON

UserModel user = UserModel() = 'Obi-Wan Kenobi' = 'obiwan.Kenobi@jedi.galaxy'
  ..phoneNumber = '478998789753'

Map<String, dynamic> json = user.toJson();


The Logger class is a simple class for printing information on the terminal only when the application is in debug mode.

Below is an example of implementing the logger.

final Logger logger = Logger();

logger.log('simple log');
/// output: simple log'information log');
/// output: 💡 information log

logger.warning('warning log');
/// output: ⚠️ warning log

logger.error('error log');
/// output: ⛔ error log

If it is necessary to add a prefix when printing all logs, use the prefix parameter in the class constructor.

final Logger logger = Logger(prefix: 'My prefix');


Implement in their classes dispose() method, allowing notify listeners when class is disposed

class Test with OnDispose {

    // your class structure

    dispose() {
        // dispose your class and call `super.dispose()` to notify listeners

In the example below, the test class will be created and an event added when discarding the class to print the text Object disposed.

final Test test = Test();
test.onDispose.add((object) => print('Object disposed'));

/// output: Object disposed