Class


class Player {
  final String name = 'steven';
  int number = 8;

  void shot() {
    print(
        '$name\\s long take shot'); 
    // 다른 언어에서는 this.name 이런식으로 사용하지만 dart의 class는 조금 다르다.
  }
}

void main() {
  var player = Player();
  player.shot();
}

Dart는 다른언어와 class에서 차이점이 있다. 예시를 들자면 다른 언어에서는 property를 this.name이런 식 으로 사용하지만 dart의 class는 name 으로 사용한다.

Constructor


class Player {
  late final String name;
  late int number;

  Player(String name, int number) {
    this.name = name;
    this.number = number;
  }
  

  void shot() {
    print(
        '$name\\s long take shot'); // 다른 언어에서는 this.name 이런식으로 사용하지만 dart의 class는 조금 다르다.
  }
}

void main() {
  var player = Player('Suarez', 7);
  player.shot();
}
class Player {
  late final String name;
  late int number;

  Player(this.name, this.number);

  void shot() {
    print(
        '$name\\s long take shot'); // 다른 언어에서는 this.name 이런식으로 사용하지만 dart의 class는 조금 다르다.
  }
}

void main() {
  var player = Player('Suarez', 7);
  player.shot();
}

마치 함수를 사용하는 것처럼 class에 인자를 넣어서 사용한다.

Named Constructors Parameters


class Player {
  late final String name;
  late int number;
  late String team;
  
  Player({required this.name, required this.number, required this.team});

  void shot() {
    print(
        "$team number$number $name's goal!"); // 다른 언어에서는 this.name 이런식으로 사용하지만 dart의 class는 조금 다르다.
  }
}

void main() {
  var player1 = Player(name: 'Steven', number: 8, team: 'Liverpool');
  player1.shot();

  var player2 = Player(name: 'Luis', number: 7, team: 'Liverpool');
  player2.shot();
}

Named Constructor


class Player {
  late final String name;
  late int number;
  late String team;
  // Player(String name, int number) {
  //   this.name = name;
  //   this.number = number;
  // }
  // Player({required this.name, required this.number, required this.team});

  Player.createLiverpoolPlayer({
    required String name,
    required int number,
  })  : this.number = number,
        this.name = name,
        this.team = 'Liverpool';

  Player.createMancityPlayer({
    required String name,
    required int number,
  })  : this.number = number,
        this.name = name,
        this.team = "Manchester City";

  void shot() {
    print(
        "$team number$number $name's goal!"); // 다른 언어에서는 this.name 이런식으로 사용하지만 dart의 class는 조금 다르다.
  }
}

void main() {
  var player1 = Player.createLiverpoolPlayer(
    name: 'Steven',
    number: 8,
  );
  player1.shot();

  var player2 = Player.createMancityPlayer(
    name: 'Sergio',
    number: 16,
  );
  player2.shot();
}
class Player {
  late final String name;
  late int number;
  late String team;

  Player.createLiverpoolPlayer({
    required String name,
    required int number,
  })  : this.number = number,
        this.name = name,
        this.team = 'Liverpool';

  Player.fromJson(Map<String, dynamic> playerJson)
      : name = playerJson['name'],
        number = playerJson['number'],
        team = playerJson['team'];

  void shot() {
    print(
        "$team number $number $name's goal!"); // 다른 언어에서는 this.name 이런식으로 사용하지만 dart의 class는 조금 다르다.
  }
}

void main() {
  var apiData = [
    {'name': "steven", 'number': 8, 'team': 'Liverpool'},
    {'name': "Kevin", 'number': 17, 'team': 'Manchester City'},
    {'name': "Toure", 'number': 42, 'team': 'Manchester City'}
  ];

  apiData.forEach((playerJson) {
    var player = Player.fromJson(playerJson);
    player.shot();
  });
}