剛開始學習flutter的話,我的感受並不須要太多的dart語法知識,因此下面就只是簡單的說一下js和dart的語法差別(一開始有的語法看的不是很懂,致使看的老是隻知其一;不知其二的)。 html
dart中字符串的表示方法有不少:前端
'Single quotes work well for string literals.'
"Single quotes work well for string literals."
'''Single quotes work well for string literals. dsa'''
複製代碼
"""Single quotes work well for string literals. dsa"""
複製代碼
raw string,在前幾種表示方式以前加上r便可。 r"Single quotes work well for string literals."
json
字符串拼接,跟js不一樣,+無關緊要。好比'test '"string"
和'test ' + "string"
都是能夠的。數組
使用變量,$name
或者 ${name}
均可以,前一種方法的後面不能直接跟字符串,要用空格或者逗號等方式隔開bash
String name = 'hello';
print('$name string'); // hello string
print('${name} string'); // hello string
複製代碼
在js中,使用判斷的時候空字符串,0,null,undefined都會被轉換爲false。網絡
可是在dart中,判斷條件就只能用bool值,若是是其餘類型的數據,就會拋出類型錯誤。函數
dart中的List和js中的數組比較像,均可以使用..展開數組。學習
List list = [1, 2, 3];
List list2 = [0, ...list];
複製代碼
不一樣點:ui
var list;
var list2 = [0, ...?list];
複製代碼
var nav = [
'Home',
'Furniture',
'Plants',
if (promoActive) 'Outlet'
];
複製代碼
var listOfInts = [1, 2, 3];
var listOfStrings = [
'#0',
for (var i in listOfInts) '#$i'
];
複製代碼
// var gifts = Map();
var gifts = {'first': 'partridge'};
gifts['second'] = 'partridge';
複製代碼
注意:this
在某種意義上來講,dart的類實例和js的對象也比較像,能夠經過.操做符訪問某個鍵的值,畢竟聲明過了嘛,哈哈。
初學dart的前端可能常常分不清Map和類實例,就以爲不都是對象嘛,怎麼訪問不到呢?這裏教你們一個方法:使用 print(變量);
若是是Map,打印出來就相似js中的對象,而若是是類實例,打印出來就是Instance of '類'
。
其實這種困惑主要發生在使用網絡請求後,其實返回的不是List就是Map,要想使用.操做符的話,就須要本身轉換類型了。json轉model的話能夠看看這個
dart函數的參數分爲 positional parameters(位置參數) 和 named parameters(命名參數)。
// positional parameters(位置參數,默認必傳)
bool isNoble(int atomicNumber) {
return atomicNumber != null;
}
// named parameters(命名參數,默承認選)
bool isNoble({ int atomicNumber }) {
return atomicNumber != null;
}
複製代碼
調用
// positional parameters(位置參數)
isNoble(1);
// named parameters(命名參數)
isNoble(atomicNumber: 1);
複製代碼
參數可選和必填:
// positional parameters(位置參數,默認必傳,用[]表示可選)
bool isNoble([int atomicNumber]) {
return atomicNumber != null;
}
// named parameters(命名參數,默承認選,使用@required表示必傳)
bool isNoble({ @required int atomicNumber }) {
return atomicNumber != null;
}
複製代碼
要使用required註解的話,還須要引入package:meta/meta.dart
,不然會報錯的。在flutter中,package:flutter/material.dart
已經默認引入了,因此才能夠直接使用。
這個的話其實也沒什麼好多的了,
class User {
String name;
// 位置參數
User(this.name);
// 至關於 User([name]): this.name = name;
// 命名參數的形式
// User({this.name});
}
複製代碼
String name = User().name ?? 'name';
dart中的 ?? 至關於js中的 || 方式吧querySelector('#confirm') // element
..text = 'Confirm'
..classes.add('important')
..onClick.listen((e) => window.alert('Confirmed!'));
複製代碼
第二行以後訪問的都是element的鍵和方法。