flutterdartconstructornamed-constructor

How do I check if an element was created with a named constructor in dart?


I was wondering if I can check which constructor I used to create the created element in an if statement in dart.

A simple example of what I want to do:

class Employee {
  int id;
  String name;
  String title;

  Employee.id(this.id);

  Employee.name(this.name);

  Employee.title(this.title);
}

Now I have an if statement somewhere in my code and want to check if I used the constructor Employee.id. In this case I would do something, somehow like this:

Employee e = new Employee.id(1)

//check if e was created with Employee.id constructur
if (e == Emploee.id) { 
   print(e.id)
} else {
   print("no id")
}

Is there a way to do this? Thank you for your answer.


Solution

  • You can define private enum property for you to set private info like this, and print it with a function later on. Also don't forget to mark your constructors with factory.

    enum _ConstructorType {
      Identifier,
      Name,
      Title,
    }
    
    class Employee {
      int id;
      String name;
      String title;
      _ConstructorType _constructorType;
    
      factory Employee.id(id) {
        return Employee._privateConstructor(_ConstructorType.Identifier, id: id);
      }
    
      factory Employee.name(name) {
        return Employee._privateConstructor(_ConstructorType.Name, name: name);
      }
    
      factory Employee.title(title) {
        return Employee._privateConstructor(_ConstructorType.Title, title: title);
      }
    
      Employee._privateConstructor(this._constructorType,
          {this.id, this.name, this.title});
    
      String constructorDescription() {
        return this._constructorType.toString();
      }
    }
    

    If you need this information not as a string, but as enum, you can always remove underscore on it, and make this info public for you to use outside of the class.