dart知識點備忘錄

運算符

expr1 ?? expr2
若是expr1非空,則返回其值; 不然,評估並返回expr2的值。json

構造函數冒號表達式

原理

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

用途

一、重定向到同一個類中的其餘構造函數less

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);
}

二、調用非默認的超類構造函數ide

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');
 }
}

三、還能夠在構造函數主體運行以前初始化實例變量。初始值設定項用逗號分開。函數

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和StatefulWidgetui

StatefulWidgetthis

修飾符

static

修飾的成員變量和成員方法是靜態的惟一的 被全部實例共享 且由類自己直接調用編碼

final和const

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

區別:orm

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類的合體區間

未完待續。。。

相關文章
相關標籤/搜索