생성자는 클래스의 이름과 같아야함.
class Player{
late final String name;
late int xp;
Player(String name, int xp){
this.name = name;
this.xp = xp;
}
void sayHello(){
var name = '1';
print("Hi my name is ${this.name}");
}
}
void main(){
var player = Player('dart',100);
player.sayHello();
var player2 = Player('alal',1200);
}
생성자 코드 줄이기
class Player{
final String name;
int xp;
Player(this.name, this.xp);
void sayHello(){
print("Hi my name is $name");
}
}
void main(){
var player = Player('dart',100);
player.sayHello();
var player2 = Player('alal',1200);
player2.sayHello();
}
< Named Constructor Parameters >
class Player{
final String name;
int xp;
String team;
int age;
Player(this.name, this.xp, this.team, this.age);
void sayHello(){
print("Hi my name is $name");
}
}
void main(){
var player = Player('dart',100,'red',12);
player.sayHello();
var player2 = Player('alal',1200,'blue',9);
player2.sayHello();
}
너무 많은 positional argument가 있으면 어떤 값을 표시하는지 알기 어려움.
class Player{
final String name;
int xp;
String team;
int age;
Player({this.name, this.xp, this.team, this.age});
void sayHello(){
print("Hi my name is $name");
}
}
void main(){
var player = Player(
name : 'dart',
xp:100,
team:'red',
age:12,
);
player.sayHello();
var player2 = Player(
name:'alal',
xp:1200,
team:'blue',
age:9,
);
player2.sayHello();
}
하지만 이것도 문제가 생길 수 있다. null일수도 있기때문
해결법 : 각 argument 앞에 required 키워드 붙이기
class Player{
final String name;
int xp;
String team;
int age;
Player({
required this.name,
required this.xp,
required this.team,
required this.age,
});
void sayHello(){
print("Hi my name is $name");
}
}
void main(){
var player = Player(
name : 'dart',
xp:100,
team:'red',
age:12,
);
player.sayHello();
var player2 = Player(
name:'alal',
xp:1200,
team:'blue',
age:9,
);
player2.sayHello();
}
< Named Constructors >
class Player{
final String name;
int xp, age;
String team;
Player({
required this.name,
required this.xp,
required this.team,
required this.age,
});
Player.createBluePlayer({
required String name,
required int age,
}) : this.age=age,
this.name = name,
this.team = 'blue',
this.xp =0;
Player.createRedPlayer(String name, int age) :
this.age=age,
this.name = name,
this.team = 'red',
this.xp =0;
void sayHello(){
print("Hi my name is $name");
}
}
void main(){
var player = Player.createBluePlayer(
name : 'dart',
age:12,
);
player.sayHello();
var redPlayer = Player.createRedPlayer('alal', 9);
player2.sayHello();
}
: => 클래스 초기화
class Player{
final String name;
int xp;
String team;
Player.fromJson(Map<String, dynamic> playerJson) :
name = playerJson['name'],
xp = playerJson['xp'],
team = playerJson['team'];
void sayHello(){
print("Hi my name is $name");
}
}
void main() {
var apiData = [
{
"name": "dart",
"team":"red",
"xp":0,
},
{
"name": "java",
"team":"red",
"xp":0,
},
{
"name": "c",
"team":"red",
"xp":0,
},
];
apiData.forEach((playerJson){
var player = Player.fromJson(playerJson);
player.sayHello;
});
}