1、關於 runApp() 上面的實例代碼中使用了 runApp() 方法,runApp 方法接收的指定參數類型爲 Widget,即: runApp(Widget)。在 Flutter 的組件樹(widget tree)中,會根據咱們在 runApp 方 法傳入的 Widget 做爲整個 App 的 根控件(root widget)。 2、關於 Widget 本實例中,控件樹(widget tree)包含兩個控件:1. Center 控件使其子控件處於 中間位置; 2.Text控件打印文本內容。runApp 方法強制將根控件覆蓋屏幕,這意味着文本「你好 ,世界!」將顯示在屏幕中心。 Flutter 佈局的機制的核心就是在 widget。控件(Widget) 定義一 個元素(Element)的配置,在Flutter框架的層次結構中處於核心層。 全部的佈局 widget 都有一個 child屬性(例如:Center 或 Container), 或者一個children 屬性,若是他們須要一個 widget 列表(例如 Row, Column, ListView 或者 Stack) 。 1、註釋 Dart的註釋分爲3種:單行註釋、多行註釋、文檔註釋。 例如:// todo:待完成 /* todo:待完成 多行註釋能夠嵌套。 */ 文檔註釋以///或者/**開頭。能夠經過dartdoc命令導出文檔。 2、關鍵字(56個) if superdo switch assert else in this enum is throw true break new try case extends null typedef catch var class false void const final rethrow while continue finally return with for default 其中內置標誌符有:(17個) abstract deferred as dynamic covariant export external factory get implements import library operator part set static typedef Dart2相對於Dart1新增的,支持異步功能的關鍵字有:(6個) async async* await sync* yield yield* 3、變量和常量 (一)變量的聲明,能夠使用 var、Object 或 dynamic 關鍵字。 建立變量並初始化變量實例:若是對象不限於單一類型(沒有明確的類型),請使用Object或 dynamic關鍵字 var name = '張三' ; Object name = '張三'; dynamic name = '李四'; String name = '張三' ; //代替var name = '張三'; //測試 數字類型的初始值是什麼? int intDefaultValue; // assert 是語言內置的斷言函數,僅在檢查模式下有效 // 在開發過程當中, 除非條件爲真,不然會引起異常。(斷言失敗則程序馬上終止) assert(intDefaultValue == null); print(intDefaultValue);//打印結果爲null,證實數字類型初始化值是null 若是您從未打算更改一個變量,那麼使用 final 或 const,不是var,也不是一個類型。 一個 final 變量只能被設置一次;const 變量是一個編譯時常量。(Const變量是隱式的final。) static const speed = 100;//常量若是是類級別的,請使用 static const.flnal 或者 const 不 能和 var 同時使用, const speed = 100; //速度(km/h)變量是一個編譯時常量。(Const變量是隱式的final。) const double distance = 2.5 * speed; // 距離 = 速度 * 時間 final speed2 = 100; //速度(km/h) // 一個final變量,只能被設置一次。 final double distance2 = 2.5 * speed2; // 距離 = 速度 * 時間 4、特殊數據類型 numbers 數字 num有兩個子類 int 和 double。math庫 strings 字符串 使用單引號或雙引號來建立一個字符串。單引號或者雙引號裏面嵌套使用引號。 單引號裏面嵌套單引號,或者//雙引號裏面嵌套雙引號,必須在前面加反斜槓。三引號可多行字符 串;聲明raw字符串(前綴爲r);toUpperCase()函數,把字母所有變成大寫。==操做符測試兩個對 象是否相等。assert是斷言 var height = 48.0; print('當前標題的高度是$height'); //當前標題的高度是48.0 String name = "張三"; print("$name"+"是咱們的部門經理"); // 張三是咱們的部門經理 String replaceStr = 'Android Studio'; assert('你知道' + '${replaceStr.toUpperCase()}' + '最新版本是多少嗎?' == '你知道ANDROID STUDIO最新版本是多少嗎?'); booleans 布爾;它有兩個值,分別是:true和false // 檢查是否爲空字符串 var emptyStr = ''; assert(emptyStr.isEmpty); // 檢查是否小於等於0 var numberStr = 0; assert(numberStr <= 0); // 檢查是否爲null var nullStr; assert(nullStr == null); // 檢查是否爲NaN var value = 0 / 0; assert(value.isNaN); lists list集合(也稱爲數組);必須單獨學習List constantList = const[10,3,15]; maps map集合Map companys = {'first': '阿里巴巴', 'second': '騰訊', 'fifth': '百度'}; runes 字符(用於在字符串中表示Unicode字符) var clapping = '\u{1f44f}'; print(clapping); print(clapping.codeUnits); print(clapping.runes.toList()); //使用String. fromCharCodes顯示字符圖形 Runes input = new Runes( '\u2665 \u{1f605} \u{1f60e} \u{1f47b} \u{1f596} \u{1f44d}'); print(new String.fromCharCodes(input)); 5、運算符 ~/ 取商 %符號表示取餘 三目運算符?? 6、控制流程語句 if(條件語句){ 內容體 }else{ 內容體 } for(初始值;判斷條件;循環後的語句){ 內容體 } for(int i=0;i<10;i++){ print(i); } var array = []; for(var i=0;i<10;i++){ array.add(()=> print(i)); } var numbers = [1,2,3,4,5,6,7,8,9]; numbers.foreach((number)=> print(number)); var list = [1,2,3]; for(var data in list){ print(data); } Dart的for循環裏面能夠使用標記:(比較有特點的地方) continue 標記名稱從內部循環直接跳轉到外部循環的下一輪循環 break標記也能夠用於跳出代碼塊。if (entry is Bad) break errorChecks; // 跳出代碼塊 ////////////// //如下兩種描述是等價的: // 使用 continue for (int i = 0; i < 10; i++) { if (i.isEven) continue; print(i); } // 使用 break. for (int i = 0; i < 10; i++) { labels: { // isEven 當且僅當該整數爲偶數時才返回true if (i.isEven) break labels; print(i); } } ////////////// void switchExample(int foo) { switch (foo) { case 0: print("foo is 0"); break; case 1: print("foo is 1"); continue shared; // Continue使用在被標記爲shared的子句中 shared: case 2: print("foo is either 1 or 2"); break; } } ///////////// while(判斷條件){ 內容體 } ////////// do{ 內容體 } while(判斷條件); //////// while(a>5){ print(a); } ////// do{ print(a); } while(a>5); ///// while(a>5){ if(b>5){ print(a); break; } } ///// while(a>5){ if(b<10){ print(b); continue; } } ////////////////// // 第一個是知足條件就進入 第二個是foreach遍歷 arrays .when((c)=>c.counts >=5) .foreach((c)=>c.next()); /////////////// switch case每一條非空case字子句以break結束 //////////////// // 確保變量具備非空值 assert(text != null); // 確保值小於100 assert(number < 100); // 確保這是一個 https 網址 assert(urlString.startsWith('https')); ///////////////// // 確保變量具備非空值 assert(text != null); // 確保值小於100 assert(number < 100); // 確保這是一個 https 網址 assert(urlString.startsWith('https')); assert(urlString.startsWith('https'),'URL ($urlString) should start with "https".'); 7、異常 throw FormatException('Expected at least 1 section'); void distanceTo(Point other) => throw UnimplementedError(); 不管是否拋出異常,要確保某些代碼運行,請使用finally子句 try { breedMoreLlamas(); } finally { // 即便拋出異常 也會執行這句代碼. cleanLlamaStalls(); } 該finally子句在任何匹配的catch子句以後運行: try { breedMoreLlamas(); } catch (e) { // 首先會處理異常 print('Error: $e'); } finally { // 而後執行這句語句 cleanLlamaStalls(); }
一、關於 runApp()
上面的實例代碼中使用了 runApp() 方法,runApp 方法接收的指定參數類型爲
Widget,即: runApp(Widget)。在 Flutter 的組件樹(widget tree)中,會根據咱們在 runApp 方
法傳入的 Widget 做爲整個 App 的 根控件(root widget)。
二、關於 Widget 本實例中,控件樹(widget tree)包含兩個控件:1. Center 控件使其子控件處於
中間位置; 2.Text控件打印文本內容。runApp 方法強制將根控件覆蓋屏幕,這意味着文本「你好
,世界!」將顯示在屏幕中心。 Flutter 佈局的機制的核心就是在 widget。控件(Widget) 定義一
個元素(Element)的配置,在Flutter框架的層次結構中處於核心層。 全部的佈局 widget 都有一個
child屬性(例如:Center 或 Container), 或者一個children 屬性,若是他們須要一個 widget
列表(例如 Row, Column, ListView 或者 Stack) 。
1、註釋Dart的註釋分爲3種:單行註釋、多行註釋、文檔註釋。例如:// todo:待完成/* todo:待完成 多行註釋能夠嵌套。 */文檔註釋以///或者/**開頭。能夠經過dartdoc命令導出文檔。
2、關鍵字(56個)ifsuperdoswitchassertelseinthisenumisthrowtruebreaknewtrycaseextendsnulltypedefcatchvarclassfalsevoidconstfinalrethrowwhilecontinuefinallyreturnwithfordefault其中內置標誌符有:(17個)abstractdeferredasdynamiccovariantexportexternalfactorygetimplementsimportlibraryoperatorpartsetstatictypedefDart2相對於Dart1新增的,支持異步功能的關鍵字有:(6個)asyncasync*awaitsync*yieldyield*3、變量和常量(一)變量的聲明,能夠使用 var、Object 或 dynamic 關鍵字。建立變量並初始化變量實例:若是對象不限於單一類型(沒有明確的類型),請使用Object或
dynamic關鍵字var name = '張三' ;Object name = '張三';dynamic name = '李四';String name = '張三' ; //代替var name = '張三';
//測試 數字類型的初始值是什麼? int intDefaultValue; // assert 是語言內置的斷言函數,僅在檢查模式下有效 // 在開發過程當中, 除非條件爲真,不然會引起異常。(斷言失敗則程序馬上終止) assert(intDefaultValue == null); print(intDefaultValue);//打印結果爲null,證實數字類型初始化值是null
若是您從未打算更改一個變量,那麼使用 final 或 const,不是var,也不是一個類型。一個 final 變量只能被設置一次;const 變量是一個編譯時常量。(Const變量是隱式的final。)
static const speed = 100;//常量若是是類級別的,請使用 static const.flnal 或者 const 不
能和 var 同時使用,
const speed = 100; //速度(km/h)變量是一個編譯時常量。(Const變量是隱式的final。) const double distance = 2.5 * speed; // 距離 = 速度 * 時間
final speed2 = 100; //速度(km/h) // 一個final變量,只能被設置一次。 final double distance2 = 2.5 * speed2; // 距離 = 速度 * 時間
4、特殊數據類型numbers 數字 num有兩個子類 int 和 double。math庫strings 字符串 使用單引號或雙引號來建立一個字符串。單引號或者雙引號裏面嵌套使用引號。
單引號裏面嵌套單引號,或者//雙引號裏面嵌套雙引號,必須在前面加反斜槓。三引號可多行字符
串;聲明raw字符串(前綴爲r);toUpperCase()函數,把字母所有變成大寫。==操做符測試兩個對
象是否相等。assert是斷言var height = 48.0;print('當前標題的高度是$height'); //當前標題的高度是48.0String name = "張三";print("$name"+"是咱們的部門經理"); // 張三是咱們的部門經理String replaceStr = 'Android Studio';assert('你知道' + '${replaceStr.toUpperCase()}' + '最新版本是多少嗎?' == '你知道ANDROID STUDIO最新版本是多少嗎?');
booleans 布爾;它有兩個值,分別是:true和false // 檢查是否爲空字符串 var emptyStr = ''; assert(emptyStr.isEmpty);
// 檢查是否小於等於0 var numberStr = 0; assert(numberStr <= 0);
// 檢查是否爲null var nullStr; assert(nullStr == null);
// 檢查是否爲NaN var value = 0 / 0; assert(value.isNaN);
lists list集合(也稱爲數組);必須單獨學習List constantList = const[10,3,15];maps map集合Map companys = {'first': '阿里巴巴', 'second': '騰訊', 'fifth': '百度'};
runes 字符(用於在字符串中表示Unicode字符)
var clapping = '\u{1f44f}';print(clapping);print(clapping.codeUnits);print(clapping.runes.toList());
//使用String. fromCharCodes顯示字符圖形 Runes input = new Runes( '\u2665 \u{1f605} \u{1f60e} \u{1f47b} \u{1f596} \u{1f44d}');print(new String.fromCharCodes(input));
5、運算符~/ 取商 %符號表示取餘 三目運算符??6、控制流程語句if(條件語句){ 內容體}else{內容體}
for(初始值;判斷條件;循環後的語句){ 內容體}
for(int i=0;i<10;i++){ print(i);}
var array = [];for(var i=0;i<10;i++){ array.add(()=> print(i));}
var numbers = [1,2,3,4,5,6,7,8,9];numbers.foreach((number)=> print(number));
var list = [1,2,3];for(var data in list){ print(data);}
Dart的for循環裏面能夠使用標記:(比較有特點的地方)continue 標記名稱從內部循環直接跳轉到外部循環的下一輪循環break標記也能夠用於跳出代碼塊。if (entry is Bad) break errorChecks; // 跳出代碼塊
////////////////如下兩種描述是等價的:
// 使用 continuefor (int i = 0; i < 10; i++) { if (i.isEven) continue; print(i);}
// 使用 break.for (int i = 0; i < 10; i++) { labels: { // isEven 當且僅當該整數爲偶數時才返回true if (i.isEven) break labels; print(i); }}
//////////////void switchExample(int foo) { switch (foo) { case 0: print("foo is 0"); break; case 1: print("foo is 1"); continue shared; // Continue使用在被標記爲shared的子句中 shared: case 2: print("foo is either 1 or 2"); break; }}/////////////while(判斷條件){ 內容體}
//////////
do{內容體} while(判斷條件);////////while(a>5){ print(a);}//////do{print(a);} while(a>5);/////while(a>5){ if(b>5){ print(a); break; }}/////while(a>5){ if(b<10){ print(b); continue; }}//////////////////// 第一個是知足條件就進入 第二個是foreach遍歷arrays .when((c)=>c.counts >=5) .foreach((c)=>c.next());///////////////switch case每一條非空case字子句以break結束////////////////// 確保變量具備非空值 assert(text != null);// 確保值小於100assert(number < 100);// 確保這是一個 https 網址assert(urlString.startsWith('https'));/////////////////// 確保變量具備非空值 assert(text != null);// 確保值小於100assert(number < 100);// 確保這是一個 https 網址assert(urlString.startsWith('https'));assert(urlString.startsWith('https'),'URL ($urlString) should start with "https".');
7、異常throw FormatException('Expected at least 1 section');void distanceTo(Point other) => throw UnimplementedError(); 不管是否拋出異常,要確保某些代碼運行,請使用finally子句
try { breedMoreLlamas();} finally { // 即便拋出異常 也會執行這句代碼. cleanLlamaStalls();}該finally子句在任何匹配的catch子句以後運行:try { breedMoreLlamas();} catch (e) { // 首先會處理異常 print('Error: $e'); } finally { // 而後執行這句語句 cleanLlamaStalls(); }數組