1.import 問題
import 'package:flutter_app/a/b.dart';
import 'pb.dart';
注: 上面兩種引用方式是有區(qū)別的, 兩種方式想要導(dǎo)入的是同一個(gè)文件, 但是卻對(duì)應(yīng)著兩個(gè)庫.推薦使用第一種.
2.布局思考
- 找出行和列.
- 布局包含網(wǎng)格嗎?
- 有重疊的元素嗎?
- 是否需要選項(xiàng)卡?
- 注意需要對(duì)齊、填充和邊框的區(qū)域.
3.常用Widget
Text
:該 widget 可讓創(chuàng)建一個(gè)帶格式的文本。Row
拳亿、Column
: 這些具有彈性空間的布局類Widget可讓您在水平(Row)和垂直(Column)方向上創(chuàng)建靈活的布局栗竖。其設(shè)計(jì)是基于web開發(fā)中的Flexbox布局模型腰池。Stack
: 取代線性布局 (譯者語:和Android中的LinearLayout相似)富拗,Stack
允許子 widget 堆疊萍歉, 你可以使用Positioned
來定位他們相對(duì)于Stack
的上下左右四條邊的位置喇肋。Stacks是基于Web開發(fā)中的絕度定位(absolute positioning )布局模型設(shè)計(jì)的坟乾。Container
:Container
可讓您創(chuàng)建矩形視覺元素迹辐。container 可以裝飾為一個(gè)BoxDecoration
, 如 background、一個(gè)邊框甚侣、或者一個(gè)陰影明吩。Container
也可以具有邊距(margins)、填充(padding)和應(yīng)用于其大小的約束(constraints)殷费。另外印荔,Container
可以使用矩陣在三維空間中對(duì)其進(jìn)行變換。
4.懶加載
懶加載使用deferred as關(guān)鍵字來指定
import 'package:deferred/hello.dart' deferred as hello;
greet() async {
await hello.loadLibrary();
hello.printGreeting();
}
5.部分導(dǎo)入
只導(dǎo)入需要的部分宗兼,使用show關(guān)鍵字
import 'package:lib1/lib1.dart' show foo;
隱藏不需要的部分躏鱼,使用hide關(guān)鍵字
import 'package:lib2/lib2.dart' hide foo;
6.沖突解決
使用as關(guān)鍵字來指定庫的前綴
import 'package:lib1/lib1.dart';
import 'package:lib2/lib2.dart' as lib2;
// ...
Element element1 = new Element(); // Uses Element from lib1.
lib2.Element element2 = new lib2.Element(); // Uses Element from lib2
7.不確定類型
使用特殊的dynamic來表示當(dāng)前的類型
8.庫的拆分
Dart允許我們把一個(gè)庫拆分成一個(gè)或者多個(gè)較小的part組件∫笊埽或者我們想讓某一些庫共享它們的私有對(duì)象的時(shí)候染苛,我們需要使用part.
part of 'xxxx.dart';
part 'xxxx.g.dart';
9.賦值
使用特殊的??=來表示進(jìn)行賦值,最常用的是在寫單例的時(shí)候.如果 _instance 為null , 則進(jìn)行賦值, 否則 _instance 保持不變~
static DartBridge _getInstance() {
_instance??= DartBridge._internal();
return _instance;
}
10.級(jí)聯(lián)操作符
使用特殊的..來表示進(jìn)行賦值
var button = querySelector('#button');
button.text = 'Confirm';
button.classes.add('important');
button.onClick.listen((e) => window.alert('Confirmed!'));
querySelector('#button') // Get an object.
..text = 'Confirm' // Use its members.
..classes.add('important')
..onClick.listen((e) => window.alert('Confirmed!'));
11.混入
使用特殊的 with 來表示進(jìn)行賦值
概念和 extends, implement相似.
extends 可以 選擇 復(fù)寫 父類的方法,
implement 可以實(shí)現(xiàn)任意一個(gè)類, 但是 需要 復(fù)寫 所有方法.
with 類似于 extends , 但是 其使用場景是 一個(gè)類 已經(jīng)有父類的情況, 這個(gè)時(shí)候 通過with,可以再添加一個(gè)父類(可以這么想).以此來緩和 Dart 單繼承特性的問題.
class A {
void setA() {}
void setACopy() {}
}
class B {
void setB() {}
}
class D extends A with B {
@override
void setA() {
// TODO: implement setA
super.setA();
}
@override
void setB() {
// TODO: implement setB
super.setB();
}
}