class Player {
String name = '김밥';
int xp = 1500;
void hello() {
print('Hi my name is $name'); // this.name 이 아닌 그냥 name으로 사용
}
}
void main() {
var player = Player(); // new 없이 초기화
print(player.name);
print(player.xp);
player.hello();
}
먼저 이름이 없고 positional으로 생성하는 방법입니다.
첫번째 인자를 name으로 지정하고 두번째 인자를 xp로 지정해서 class를 생성합니다.
class Player {
final String name;
final int xp;
Player(this.name, this.xp);
void hello() {
print('Hi my name is $name');
}
}
void main() {
var player = Player('싸피', 100);
var player2 = Player('김밥', 100);
player.hello();
}
function 와 동일하게 중괄호로 감싸주면 끝입니다.
또한 required를 지정하거나, default값을 지정해 주어야합니다.
class Player {
final String name;
final int xp;
Player({required this.name, this.xp = 77});
void hello() {
print('Hi my name is $name xp = $xp');
}
}
void main() {
var player = Player(name: '싸피', xp: 100);
var player2 = Player(name: '김밥');
player.hello(); //Hi my name is 싸피 xp = 100
player2.hello(); //Hi my name is 김밥 xp = 77
}
생성자를 하나가 아닌 다르게 여러개를 만들수 있습니다.
예를 들어, 다음과 같은 방식이 있습니다.
class Player {
final String name, team;
final int xp, age;
Player({
required this.name,
required this.team,
required this.xp,
required this.age,
});
Player.createBluePlayer({
required String name,
required int age,
}) : this.age = age,
this.name = name,
this.team = 'blue',
this.xp = 0;
void hello() {
print('Hi my name is $name xp = $xp');
}
}
void main() {
var player = Player(name: '싸피', xp: 100, age: 1, team: 'red');
var bluePlayer = Player.createBluePlayer(name: '싸피', age: 1);
// Player(name: '싸피', xp: 0, age: 1, team: 'blue') 과 같은 결과
}
Named Constructors방식을 사용한 API데이터를 가져와서 class를 생성하는 간단한 예시입니다.
class Player {
final String name;
int xp;
String team;
Player.fromJson(Map<String, dynamic> playerJson)
: name = playerJson['name'],
team = playerJson['team'],
xp = playerJson['xp'];
void sayHello() {
print('안녕하세요 저는 $team팀의 $xp번 $name 입니다');
}
}
void main() {
var apiData = [
{'name': 'dale', 'team': "red", 'xp': 0},
{'name': 'davinchi', 'team': "blue", 'xp': 30},
{'name': 'lambda', 'team': "red", 'xp': 10},
];
List<Player> players = [];
apiData.forEach((player) {
var data = Player.fromJson(player);
players.add(data);
});
players.forEach((p) {
p.sayHello();
});
}