dart知識點備忘錄

三元運算符

expr1 ?? expr2
如果expr1非空,則返回其值; 否則,評估並返回expr2的值。

構造函數冒號表達式

原理

冒號初始化是給數據成員分配內存空間時就進行初始化,就是說分配一個數據成員只要冒號後有此數據成員的賦值表達式(此表達式必須是括號賦值表達式),那麼分配了內存空間後在進入函數體之前給數據成員賦值,就是說初始化這個數據成員此時函數體還未執行。

用途

1、重定向到同一個類中的其他構造函數
class Point {
num x, y;
// The main constructor for this class.
Point(this.x, this.y);
// Delegates to the main constructor.
Point.alongXAxis(num x) : this(x, 0);
}
2、調用非默認的超類構造函數
class Employee extends Person {
// Person does not have a default constructor;
// you must call super.fromJson(data).
Employee.fromJson(Map data) : super.fromJson(data) { // “:"調用了他的超類Person中的命名構造函數
print('in Employee');
}
}
3、還可以在構造函數主體運行之前初始化實例變量。初始值設定項用逗號分開。
import 'dart:math';

class Point {
final num x;
final num y;
final num distanceFromOrigin;

Point(x, y)
: x = x,

    y = y,
    distanceFromOrigin = sqrt(x * x + y * y);

}

main() {
var p = new Point(2, 3);
print(p.distanceFromOrigin);
}

StatelessWidget和StatefulWidget

StatefulWidget

修飾符

static

修飾的成員變量和成員方法是靜態的唯一的 被所有實例共享 且由類本身直接調用

final和const

如果你不打算改變一個變量,可以使用final和const,它們可以替代任何類型,必須在聲明時初始化,且不能改變。

區別:

const是編譯器常量,它的值在編譯期就可以確定,final是運行時常量,它的初始值要到運行時才能確定。

class Custom extends StatefulWidget {

    Custom({Key: key, this.title}) : super(key: key); // key ?
    final String title;
    @override
    _CustomState createState() => new _CustomState();

}
class _CustomState extends State<Custom> {

    @override
    Widget build(BuildContext context) { // context: 當前控件(元素)的定位
            print(’title: ${widget.title}’); // widget: StatefulWidget類(或者Custom類)的實例
    }

}

const定義的是編譯時常量,只能用編譯時常量來初始化
final定義的常量可以用變量來初始化
const list = const[1,2,3];//Ok
const list = [1,2,3];//Error

final list = [1,2,3];//Ok
final list = const[1,2,3];//Ok
final list = const[new DateTime.now(),2,3];//Error,const右邊必須是常量

dynamic

a 的數據類型可以隨意改變,這種類型就是 dynamic

factory

常用來修飾構造函數,將其變爲工廠構造函數
工廠構造函數是一種構造函數,與普通構造函數不同,工廠函數不會自動生成實例,而是通過代碼來決定返回的實例對象.

dart:convert

dart:convert是dart提供用於在不同數據表示之間進行轉換的編碼器和解碼器,能夠解析JSON和UTF-8。
用途:
網絡請求返回(接口返回)時需要先將json數據(字符串)使用dart:convert轉成Map,我們就能通過Map轉爲dart對象了。

super()

作用:1.子類和父類的變量,有語義上的衝突時,需要用super調用父類的變量(方法,變量)

       2. 每個子類的構造方法的第一句,都必須 顯示或者隱式通過super調用父類的構造方法
       3.隱式調用只能調用,無參的構造方法
       4.如果父類沒有無參的構造方法,那麼必須使用super調用父類的構造方法
       5.通過這樣的機制保證了父類的構造方法先執行完畢,然後執行子類的構造方法
       6.通過super  來訪問父類的構造方法,執行的意義在於,對父類實例成員的初始化

this和super並不衝突,因爲當前構造方法沒有調用super()其他構造方法必然有,第一句必然是super
那這個構造方法調用了那個構造方法,也就是說這個構造方法的第一句也必然是執行父類的構造方法。

mixin使用

mixin MixinSuper on AbstractSuper {} // 聲明瞭一種mixin,叫MixinSuper類,它繼承了實現AbstractSuper類的ImplSuper類

等同於:

abstract class AbstractSuper {}
class ImplSuper implements AbstractSuper {}
class MixinSuper extends ImplSuper {}

class Sub extends NormalSuper with MixinSuper {} // Sub類繼承了NormalSuper類和MixinSuper類的合體區間
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章