oopdartfluttersingleton

In Dart, is it possible to pass an argument in a singleton?


class Peoples {
  late int id;
  late String name;

  static final Peoples _inst = Peoples._internal();

  Peoples._internal();

  factory Peoples() {
    return _inst;
  }
}

I have this singleton class. Which ensures that, only one instance of a class is ever created. So, even if someone tries to instantiate it, they will use the same instance. And i can create and set values, like:

  Peoples ps1 = Peoples();
  Peoples ps2 = Peoples();

  ps1.id = 1;
  ps1.name = "First";

  ps2.id = 2;
  ps2.name = "Second";

Is it possible to instantiate and set values like:

  Peoples ps1 = Peoples(1, "First");
  Peoples ps2 = Peoples(2, "Second");

So, now both "ps1" and "ps2" will have (2, "Second").


Solution

  • Sure! You need to pass the arguments to the factory method then you need to update the properties USING the referenced instance.

    For example, you had

    class Peoples {
      late int id;
      late String name;
    
      static final Peoples _inst = Peoples._internal();
    
      Peoples._internal();
    
      factory Peoples() {
        return _inst;
      }
    }
    

    If you apply my solution then you have

    class Peoples {
      late int id;
      late String name;
    
      static final Peoples _inst = Peoples._internal();
    
      Peoples._internal();
    
      factory Peoples({int id, String name}) {
        _inst.id = id
        _inst.name = name
        return _inst;
      }
    }
    

    with this your question should be answered for more info about factory and params visit

    https://dart.dev/guides/language/language-tour

    Working Example

    class Peoples {
      late int id;
      late String name;
    
      static final Peoples _inst = Peoples._internal();
    
      Peoples._internal();
      
    
      factory Peoples(int id, String name) {
        _inst.id = id;
        _inst.name = name;
        return _inst;
      }
    }
    
    void main() {
      print("Instance of = " + Peoples(0, "Dylan").name);
      print("Instance of = " + Peoples(1, "Joe").name);
      print("Instance of = " + Peoples(2, "Maria").name);
    }