鑒于很多朋友私信讓分享一些dart基礎(chǔ)知識,今天就給大家分享一些dart基本操作1锓伞!姆吭!
- 變量:一旦附上值榛做,他的數(shù)據(jù)類型就定了 不能在賦其他類型值
1.
var username = 'Flutter';//username 就定了是字符串類型
username = 123;//此時再賦整型就行報錯
2.
Object和dynamic 都是大的類型
dynamic a = 'goood job'; //dynamic是可以推斷出值是什么類型
Object b = 'goodd job';
print(a.length);
print(b.length);//b 是不具備length方法
- 常量:設(shè)置一次值之后就不能在變了
1.
final psw1 = 'Flutter';
2.
const psw2 = 'Flutter';
- 數(shù)據(jù)類型
int psw3 = 110;
double psw4 = 11.1;
//字符串轉(zhuǎn)int
int psw5= int.parse('119');
double psw6 = double.parse('111.11');
//int轉(zhuǎn)字符串
String psw7 = psw3.toString();
//四舍五入并且保留兩位小數(shù)
String psw8 = 123.2262.toStringAsFixed(2);
print(psw8);//值是123.23
//bool類型
bool results = 123 > 110;
print(results);//打印結(jié)果:true
bool results = 1 == '1';
print(results);//打印結(jié)果:false
//List 是數(shù)組類型
List list = [1,3,5,7,9];//創(chuàng)建數(shù)組方式1
List newList = new List();//創(chuàng)建數(shù)組方式2
newList.add(2);//add 一個值進(jìn)去
newList.addAll([4,6,8,10]);//add 一個數(shù)組進(jìn)去
print(newList);//打印結(jié)果:2 4 6 8 10
print(newList.length);//打印結(jié)果:5
print(newList.first);//打印第一個值 打印結(jié)果:2
print(newList.last);//打印最后一個值 打印結(jié)果:10
print(newList[2]);//打印下標(biāo)為2 的值 打印結(jié)果:6
//Map類型 對象類型
Map obj = {'x':1,'y':2,'z':3};//創(chuàng)建方式 1
Map newObj = new Map();//創(chuàng)建方式 2
newObj['x'] = 1;
newObj['y'] = 2;
print(newObj);//打印結(jié)果:{x: 1, y: 2}
print(obj.containsKey('x'));//判斷是否包含x的key 打印結(jié)果:true
print(obj.containsKey('a'));// 打印結(jié)果:false
obj.remove('y');//刪除Map中對應(yīng)的值
print(obj);// 打印結(jié)果:{x: 1, z: 3}
- 定義方法
//無參 有返回值
//返回參數(shù)是字符串類型 方法名是getUserName
String getUserName(){
return 'hello world';
}
String userName = getUserName();//調(diào)用
//有參 有返回值
//返回參數(shù)是字符串類型 方法名getPersionInfo 接收的參數(shù)是userId
String getPersionInfo(int userId){
Map userInfon = {
'111':'zhangsan',
'222':'lisi',
};
return userInfon[userId.toString()];
}
String userId = getPersionInfo(111);//調(diào)用
print(userId);//打印結(jié)果:zhangsan
//可選參數(shù)
//1.可選參數(shù) [ ] 中括號代表可選參數(shù) 不加中括號的話就是必傳的參數(shù)
int addAge(int age1,[int age2]) {
return age1+(age2 != null ? age2 : 0);
}
int age = addAge(1,2);//調(diào)用
print(age);//打印結(jié)果:3
//2.可以給參數(shù)賦上默認(rèn)值 賦上默認(rèn)值要給參數(shù)加上大括號
int addAge2([int age1,int age2 = 0]){
return age1+age2;
}
int age2 = addAge2(1,2);//調(diào)用
print(age2);//打印結(jié)果:3
//匿名函數(shù) for循環(huán)遍歷數(shù)組
var list = ['abc','cde','afg'];
list.forEach((str){
print(str);
});
打印結(jié)果:abc cde afg
- 類的使用
//1.只是創(chuàng)建了一個類里面有2個屬性
class Person {
int age;
String name;
}
p.age = 23;
print(p.age);
//2.具有實(shí)例化的方式創(chuàng)建一個類
class Person2 {
//1.可以給這個類定義一些屬性
int age;
String name;
//構(gòu)造函數(shù) 就是一個同名的方法
Person2(int age,String name){
this.age = age;
this.name = name;
}
//2.可以給這個類定義一些方法
void sayHello(){
print('My name is:'+this.name);
}
}
var p2 = new Person2(23,'zhansgan');//實(shí)例化的方式創(chuàng)建
print(p2.name);//打印結(jié)果:zhansgan
p2.sayHello(); //打印結(jié)果:My name is:zhansgan(調(diào)用了Person2里面的sayHello方法)
- 類的繼承
//1.創(chuàng)建了Worker類 繼承 Person2
class Worker extends Person2 {//繼承用 extends
int salary;//比父類多了一個屬性salary
Worker(int age, String name,int salary) : super(age, name){//新添了一個屬性salary
this.salary = salary;
}
@override //告訴編譯器 我重寫了父類的同名方法
void sayHello(){
super.sayHello();//先調(diào)用了父類的sayHello
print('My salary is:'+this.salary.toString());
}
}
//外界使用
var w = new Worker(20, 'lisi', 1000);
w.sayHello();//打印結(jié)果是 先打印父類的sayHello方法 再打印Worker的sayHello方法
- dart 里面只能單繼承 不能繼承多個父類 如果有需要繼承多個父類的需求需要用混合的方式實(shí)現(xiàn)
比如看下面例子:
//1.定義了一個Eat類
class Eat {
void eat(){
print('吃飯');
}
void sayHello() {
print('say hello in Eat');
}
}
//2.定義了一個Sleep類
class Sleep {
void sleep(){
print('睡覺');
}
void sayHello() {
print('say hello in Sleep');
}
}
//3.定義了一個Person類混合了Eat和Sleep類
class Person with Eat,Sleep {//多繼承 把Eat 和 Sleep 都混合到Person 里面去 這時Person3就具備了eat和sleep的方法
//1.可以給這個類定義一些屬性
int age;
String name;
//構(gòu)造函數(shù)
Person3(int age,String name){
this.age = age;
this.name = name;
}
//2.可以給這個類定義一些方法
void sayHello(){
print('My name is:'+this.name);
}
}
var p = new Person(18, 'wangwu');
p.eat();//這時p 具備了Eat類的方法
p.sleep();//這時p 具備了Sleep類的方法
p.sayHello();//p 還具備了我自己的方法 //注意 如果混合的類里面有和自身類同名的方法的時候優(yōu)先使用自身類的方法、其次是用混合最后一個類的方法
- 抽象類:就是我有一個想法 但是我不知道怎么實(shí)現(xiàn)内狸。所以我就先把我的想法說出來检眯。
抽象類不能實(shí)例化 所以用抽象類就是為了定義一個規(guī)則 讓別人遵守這個規(guī)則
//定義一個抽象類
abstract class Animal {
//這是一個方法的實(shí)現(xiàn)
// void have_a_baby(){
// print(have_a_baby);
// }
//抽象方法 只有方法的定義
void have_a_baby();
}
//這時再創(chuàng)建一個類繼承Animal抽象類
class Person extends Animal {
//1.可以給這個類定義一些屬性
int age;
String name;
//構(gòu)造函數(shù)
Person3(int age,String name){
this.age = age;
this.name = name;
}
//2.可以給這個類定義一些方法
void sayHello(){
print('My name is:'+this.name);
}
//3.實(shí)現(xiàn)have_a_baby 這時Person繼承了Animal類。但是Animal類里面的方法沒有實(shí)現(xiàn)昆淡,就會報錯,此時需要子類實(shí)現(xiàn)這個方法
@override
void have_a_baby() {
// TODO: implement have_a_baby
print('have_a_baby');
}
}