前端開發是否迎來大統一?flutter是否能夠勝任原生開發的性能?帶着一個有一個的疑問,去了解flutter。 flutter開發語言上的選擇。爲何最終使用了dart一個曾經js熱度大增的時刻卻不溫不火的語言。以及dart對現有語言特性優勢的吸取。 這裏不講述flutter開發app的優勢以及和reactNative、ionic的一些對比。有須要瞭解到自行百度或者google。前端
1)數據類型java
2)變量的聲明react
var const final int double String bool List Map等等。android
這裏說一下var const final定義變量的區別:ios
若是你毫不想改變一個變量,使用final或const,不要使用var或其餘類型,一個被final修飾的變量只能被賦值一次,一個被const修飾的變量是一個編譯時常量(const常量毫無疑問也是final常量)。能夠這麼理解:final修飾的變量是不可改變的,而const修飾的表示一個常量。git
注意:實例變量能夠是final的但不能是const的 類的靜態屬性是可使用const的github
區別一:final 要求變量只能初始化一次,並不要求賦的值必定是編譯時常量,能夠是常量也能夠不是。而 const 要求在聲明時初始化,而且賦值必需爲編譯時常量。web
區別二:final 是惰性初始化,即在運行時第一次使用前才初始化。而 const 是在編譯時就肯定值了。macos
3)函數windows
//定義函數的形式
void main()=>runStart();
//相似於js的箭頭函數
void main(){
runStart();
}
//和上面是一個意思
複製代碼
//第一個num函數返回值類型,其餘是變量的類型 其中a,b,c爲必傳參數
num add(num a,num b,num c){
return a+b+c;
}
void main()=>add(1,2,3);
複製代碼
/**
第一個num函數返回值類型,其餘是變量的類型 其中a,b,c爲非必傳參數
下面函數爲非不傳參數給出了初始值
*/
num add({num a=0,num b=0,num c=0}){
return a+b+c;
}
void main()=>add(a:1,b:2);
複製代碼
/**
第一個num函數返回值類型,其餘是變量的類型 其中a必傳,b和c非必傳參數
下面函數爲非不傳參數給出了初始值
*/
num add(num a,{num b=0,num c=0){
return a+b+c;
}
void main()=>add(1,b:1,c:2);
複製代碼
3)運算符
js有隱式類型轉化和除了0 false null NaN undefied ''爲假其餘全是真值的特性。 可是dart沒有。dart是強類型語言。
int a = 5;
int b = 10;
print(a+b); //15
print(a-b); //-5
print(a*b); 50
print(a/b); 0.5
print(a~/b);0 除以並取整數位
//--和++和% 和其餘同樣就不在接列啦
//其中+運算符也能夠用於字符串拼接和js相同
複製代碼
//dart中沒有===操做符。
//==操做符能夠比較不一樣數據類型的值可是會提示類型不相關
//能夠在根目錄下新建analysis_option.yaml文件 不一樣類型==就會報錯
//!=和==用法同樣
linter:
rules:
- unrelated_type_equality_checks
analyzer:
error:
unrelated_type_equality_checks: error
/**其他的還有
>
<
>=
<=
*/
//共的說來不一樣數據類型的值的比較須要先轉化數據類型才能比較。
複製代碼
/**
用於bool類型的值
||或運算符
&&且運算非
!非運算符
*/
print(!false); //true
print(!true); //fasle
複製代碼
//這裏面說一下??=運算符
int a = 10;
a??=20;
print(a); //輸出10
int b;
b??=20;
print(b); //輸出20
//??=就是前面的變量沒有值的時候會被賦值
複製代碼
//三目運算符:condition ? expr1 : expe 不在多說都知道
// ??運算符:expr1 ?? expr2
//若是 expr1 爲非null,則返回其值; 不然,計算並返回 expr2 的值
print(1??2); //1
print(null??2); //2
print(fasle??2); //false
複製代碼
4)類
學過java的同窗確定知道。知道ts的同窗理解起來也不會很難。有時候發現語言都是有相似的地方。相互借鑑優勢。 不懂的就google一下吧。
T getVal<T>(T a){
return a;
}
//這裏面的T就是泛型。沒有指明具體的數據類型。由於有些邏輯是須要複用封裝的。在類中普遍使用着泛型
複製代碼
class Person{
String name;
int age;
Person(this.name,this.age);
//能夠定義多個構造函數。作不一樣的處理
Person.create(String name){
this.name = name;
this.age = 10;
}
}
複製代碼
//類中的範型使用
class A<T>{
T val;
String name;
A(this.val,this.name);
}
class B{
int age;
int sex;
B(this.age,this.sex);
}
main(){
A<B> a=new A<B>(new B(1,2),'b');
print(a);
}
複製代碼
這裏以mac安裝爲例。windows安裝流程基本一致。
1)flutter SDk安裝
vi ~/.bash_profile
//使用鏡像加速,把下面添加到環境變量
export PUB_HOSTED_URL=https://pub.flutter-io.cn
export FLUTTER_STORAGE_BASE_URL=https://storage.flutter-io.cn
複製代碼
vi ~/.bash_profile
//pwd是你的flutter安裝目錄
//flutter安裝以後dart是捆綁安裝的,也能夠把dart設置環境變量,方便測試api和學習dart語言
//dart-sdk放在flutter/bin/cache/dart-sdk目錄
export PATH=`pwd`/flutter/bin:$PATH
export PATH=`pwd`/flutter/bin/cache/dart-sdk/bin:$PATH
複製代碼
修改完以後保存退出。
source ~/.bash_profile
//以後能夠查看對應版本
flutter --version
dart --version
複製代碼
2)xcode和Android Studio安裝
xcode能夠直接在App store安裝,很少說。
3)flutter doctor
flutter doctor //檢查flutter環境
複製代碼
open -a Simulator //開啓模擬器
flutter doctor //再次檢查 ok
複製代碼
通常狀況下都會或多或少出現問題,根據報的問題處理。
//1.沒安裝browhome,安裝browhome
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
//二、更新,安裝cocoapods
brew update //更新沒安裝browhome
brew install --HEAD libimobiledevice
brew install ideviceinstaller ios-deploy cocoapods //安裝
pod setup //啓動
複製代碼
到此通常環境沒啥問題,選擇一款本身喜歡的開發工具。我這裏用vscode。vscode須要安裝插件Flutter ~
//前提是打開設備或者虛擬設備
flutter create myapp
cd myapp
flutter run
複製代碼
以前寫了一個混合開發的android 嵌入flutter 踩坑記錄
flutter開發流程和經常使用widget以及圖片資源,經常使用包的安裝使用。東西比較多暫定上中下三篇。感興趣的能夠關注一下~