群组
Flutter,iOS,Android,Python等,闲聊工作&技术&问题;
个人主页:https://waitwalker.cn
telegram群链接:https://t.me/joinchat/Ej0o0A1ntlq5ZFIMzzO5Pw
接着上篇,这节继续Dart基础语法.
类
类是一个实例的抽象,通过类来创建实例,创建实例的过程叫做初始化.
构造函数
Dart中的基本构造函数是通过编写一个和类同名的方法实现:
class Car extends Object {
// 构造函数
Car(double color, int price) {
}
}
也可以通过简写来创建构造函数:
class Car extends Object {
// 构造函数
// Car(double color, int price) {
// }
Car(double color, int price);
}
便利构造器
遍历构造器是类构造函数的一种方式.
class Car extends Object {
// 构造函数
// Car(double color, int price) {
// }
Car(double color, int price);
// 便利构造器
Car.init(double height, double width) {
print("car height:$height, car width:$width");
}
}
Car.init(12.0,2.0);
属性变量
其他语言像Swift,Python等都有属性变量,其实这是成员变量的另一种写法,Dart同样也有属性变量:
class Car extends Object {
double color;
int price;
// 构造函数
// Car(double color, int price) {
// }
Car(double color, int price) {
this.color = color;
this.price = price;
}
// 便利构造器
Car.init(double height, double width) {
print("car height:$height, car width:$width");
}
}
我们在类中调用成员变量的时候可以通过this指针来调用,有点类似JavaScript.如果我们想设置只读属性,可以用final关键字修饰属性,之前已经提到过了.
实例方法和类方法
类方法是通过类名直接调用方法,定义的时候需要static关键字修饰:
static int newPrice = 10;
// 类方法
static int getPrice() {
print("price:$newPrice");
return 10;
}
Car.getPrice();
类方法中只能调用static修饰的静态变量.
实例方法通过实例对象来调用:
// 实例方法
double getHeight() {
return this.height;
}
存取方法
Dart中可以重写属性变量的setter和getter方法:
int get totalPrice => this.price * 2;
set totalPrice(int value) => price + value;
类的继承
在Dart中类和接口是统一的,类也是一个接口.类可以被重写,也可以被实现.抽象类更像一个接口文件,其定义待实现的方法和变量等.
抽象类(接口)
Dart中的抽象类更像Swift中的protocol,可以通过抽象类实现多继承:
// 汽车价格接口文件
abstract class PriceInterface {
// 获取汽车价格方法声明
int carPrice();
}
// 汽车颜色接口文件
abstract class ColorInterface {
// 获取汽车颜色
double carColor();
}
继承
在Dart也有一个超类Obejct,任何类都继承自这个类.Dart中支持单继承,多继承可以通过接口文件实现(抽象类),继承使用Extends关键字,实现多继承通过implements关键字.如果类中的方法被重写了,在方法的上面会添加@override关键字;
单继承一个类,继承某个类不必须实现父类中的所有方法:
class Father extends Object {
Father() {
print("this is father");
}
void name() {
print("father name");
}
}
class Son extends Father {
Son() {
print("this is son");
}
@override
void name() {
// TODO: implement name
super.name();
print("son name");
}
}
实现某个接口或者类必须实现接口或类中所有的方法:
多继承多个接口:
// mini cooper
class MiniCooper implements PriceInterface, ColorInterface {
int price;
double color;
// 构造函数
MiniCooper(int price, double color){
this.price = price;
this.color = color;
}
@override
int carPrice() {
// TODO: implement carPrice
return 20;
}
@override
double carColor() {
// TODO: implement carColor
return 20.0;
}
}
单个类的实现:
class grandSon implements Son {
@override
void name() {
// TODO: implement name
}
}
泛型
泛型指的是编译期不知道对象的具体类型,对象的类型在运行时期确定.
class BBQ<T> extends Object {
BBQ(T value) {
print("value:$value, value type: ${value.runtimeType}");
}
}
BBQ bbq = BBQ("bbq");
I/flutter (29031): value:bbq, value type: String
包
包管理器
Dart使用Pub来管理包,pub官网其配置文件是pubspec.yaml,如果你想添加其他第三方依赖,直接将依赖配置添加到这个文件中:
## http请求库
dependencies:
flutter:
sdk: flutter
# The following adds the Cupertino Icons font to your application.
# Use with the CupertinoIcons class for iOS style icons.
cupertino_icons: ^0.1.2
# http 请求库
http: ^0.12.0+2
然后执行如下命令下载更新依赖:
flutter pub get
导入包
import 'package:http/http.dart' as http;