[{"data":1,"prerenderedAt":3082},["ShallowReactive",2],{"wiki-page-/wiki/2026-02-16-flutter-jiao-cheng/ch4-dart-yu-yan-jiao-cheng":3,"wiki-doc-items-/wiki/2026-02-16-flutter-jiao-cheng/ch4-dart-yu-yan-jiao-cheng":3060},{"id":4,"title":5,"body":6,"chapter":3046,"chapterSort":3047,"date":3048,"description":119,"docKey":3049,"docRoot":3050,"docTitle":3051,"extension":3052,"isWikiDoc":183,"isWikiIndex":3053,"layout":3054,"meta":3055,"navigation":183,"path":3056,"seo":3057,"stem":3058,"wikiDepth":126,"__hash__":3059},"content/wiki/2026-02-16-Flutter教程/ch4-Dart语言教程.md","Dart语言教程",{"type":7,"value":8,"toc":3041},"minimark",[9,13,22,43,47,53,58,68,71,85,88,113,320,324,335,338,351,536,542,570,578,583,695,705,912,915,922,935,1028,1032,1037,1067,1073,1075,1090,1093,1126,1129,1132,1160,1204,1790,1793,1806,1888,1891,1912,1915,1940,1944,1950,1952,1966,1969,1998,2264,2267,2272,2286,2358,2361,2364,2370,2373,2386,2541,2546,2554,2558,2561,2566,2577,2726,2729,2733,2744,2813,2824,2907,2910,2918,2923,3037],[10,11,12],"h3",{"id":12},"代码规范",[14,15,16,17,21],"p",{},"几乎和",[18,19,20],"code",{},"C/C++","一模一样.",[23,24,25,33,36],"ul",{},[26,27,28,29,32],"li",{},"扩展名： dart语言文件后缀以",[18,30,31],{},".dart","结尾",[26,34,35],{},"入口：dart文件的入口方法为main方法",[26,37,38,39,42],{},"分号：dart文件中绝大部分语句都需要加分号结尾，像 ",[18,40,41],{},"{ }"," 后通常不加分号",[10,44,46],{"id":45},"dart的变量","Dart的变量",[14,48,49,50,52],{},"该节与",[18,51,20],{},"高度相似.",[54,55,57],"h4",{"id":56},"字符串类型-string","字符串类型-String",[14,59,60,61,63,64,67],{},"与",[18,62,20],{},"中的",[18,65,66],{},"std::string","基本类似.",[14,69,70],{},"基础用法:",[23,72,73,76,82],{},[26,74,75],{},"关键字：String",[26,77,78,79],{},"语法：",[18,80,81],{},"String 属性名 = ‘文本内容’;",[26,83,84],{},"特点：引号支持双引号或者单引号，支持拼接及模板字符串",[14,86,87],{},"进阶用法:",[23,89,90,99],{},[26,91,78,92,95,96],{},[18,93,94],{},"String 属性名 = ‘文本内容$变量名’;"," 或 ",[18,97,98],{},"String 变量名 = ‘文本内容${变量名}’;",[26,100,101,102,105,106,108,109,112],{},"注意：当存在模板中的内容是一个表达式的时候需要使用",[18,103,104],{},"${}",", 不管是表达式还是变量,都更推荐使用",[18,107,104],{},",尽量不要用",[18,110,111],{},"$变量名","了.",[114,115,120],"pre",{"className":116,"code":117,"language":118,"meta":119,"style":119},"language-dart shiki shiki-themes github-light github-dark","void main()\n{\n  String name = 'Alice';\n  print(name); // Output: Alice\n\n  name = 'Bob';\n  print(name); // Output: Bob\n\n  String greeting = 'Hello, ${name}?$name!';\n  print(greeting); // Output: Hello, Bob?Bob!\n\n  String when = 'it is ${DateTime.now()},now';\n  print(when); // Output: it is 2026-02-16 14:46:17.818262,now\n}\n","dart","",[18,121,122,139,145,165,178,185,198,208,213,248,259,264,297,314],{"__ignoreMap":119},[123,124,127,131,135],"span",{"class":125,"line":126},"line",1,[123,128,130],{"class":129},"szBVR","void",[123,132,134],{"class":133},"sScJk"," main",[123,136,138],{"class":137},"sVt8B","()\n",[123,140,142],{"class":125,"line":141},2,[123,143,144],{"class":137},"{\n",[123,146,148,152,155,158,162],{"class":125,"line":147},3,[123,149,151],{"class":150},"sj4cs","  String",[123,153,154],{"class":137}," name ",[123,156,157],{"class":129},"=",[123,159,161],{"class":160},"sZZnC"," 'Alice'",[123,163,164],{"class":137},";\n",[123,166,168,171,174],{"class":125,"line":167},4,[123,169,170],{"class":133},"  print",[123,172,173],{"class":137},"(name); ",[123,175,177],{"class":176},"sJ8bj","// Output: Alice\n",[123,179,181],{"class":125,"line":180},5,[123,182,184],{"emptyLinePlaceholder":183},true,"\n",[123,186,188,191,193,196],{"class":125,"line":187},6,[123,189,190],{"class":137},"  name ",[123,192,157],{"class":129},[123,194,195],{"class":160}," 'Bob'",[123,197,164],{"class":137},[123,199,201,203,205],{"class":125,"line":200},7,[123,202,170],{"class":133},[123,204,173],{"class":137},[123,206,207],{"class":176},"// Output: Bob\n",[123,209,211],{"class":125,"line":210},8,[123,212,184],{"emptyLinePlaceholder":183},[123,214,216,218,221,223,226,229,232,235,238,241,243,246],{"class":125,"line":215},9,[123,217,151],{"class":150},[123,219,220],{"class":137}," greeting ",[123,222,157],{"class":129},[123,224,225],{"class":160}," 'Hello, ",[123,227,228],{"class":160},"${",[123,230,231],{"class":150},"name",[123,233,234],{"class":160},"}",[123,236,237],{"class":160},"?",[123,239,240],{"class":160},"$",[123,242,231],{"class":150},[123,244,245],{"class":160},"!'",[123,247,164],{"class":137},[123,249,251,253,256],{"class":125,"line":250},10,[123,252,170],{"class":133},[123,254,255],{"class":137},"(greeting); ",[123,257,258],{"class":176},"// Output: Hello, Bob?Bob!\n",[123,260,262],{"class":125,"line":261},11,[123,263,184],{"emptyLinePlaceholder":183},[123,265,267,269,272,275,278,280,283,286,289,292,295],{"class":125,"line":266},12,[123,268,151],{"class":150},[123,270,271],{"class":129}," when",[123,273,274],{"class":129}," =",[123,276,277],{"class":160}," 'it is ",[123,279,228],{"class":160},[123,281,282],{"class":150},"DateTime",[123,284,285],{"class":160},".",[123,287,288],{"class":133},"now",[123,290,291],{"class":160},"()}",[123,293,294],{"class":160},",now'",[123,296,164],{"class":137},[123,298,300,302,305,308,311],{"class":125,"line":299},13,[123,301,170],{"class":133},[123,303,304],{"class":137},"(",[123,306,307],{"class":129},"when",[123,309,310],{"class":137},"); ",[123,312,313],{"class":176},"// Output: it is 2026-02-16 14:46:17.818262,now\n",[123,315,317],{"class":125,"line":316},14,[123,318,319],{"class":137},"}\n",[54,321,323],{"id":322},"数字类型-intdoublenum","数字类型-int/double/num",[14,325,60,326,63,328,331,332,67],{},[18,327,20],{},[18,329,330],{},"int",",",[18,333,334],{},"double",[14,336,337],{},"基础语法",[23,339,340,343,346],{},[26,341,342],{},"场景：当我们需要描述一个数字类型的时候，需要使用int/num/double",[26,344,345],{},"区别：int-整型数字，double-小数 , num-可整型可小数",[26,347,78,348],{},[18,349,350],{},"int/num/double 属性名 = 数值;",[114,352,354],{"className":116,"code":353,"language":118,"meta":119,"style":119},"void main()\n{\n  int age = 23;\n  print(age); // Output: 23\n\n  age = 24;\n  print(age); // Output: 24\n\n  double height = 1.78;\n  print(height); // Output: 1.78\n\n  height = 1.80;\n  print(height); // Output: 1.8\n\n  num weight = 90.5;\n  print(weight); // Output: 90.5\n\n  weight = 76;\n  print(weight); // Output: 76\n}\n",[18,355,356,364,368,383,393,397,409,418,422,437,447,451,463,472,476,492,503,508,521,531],{"__ignoreMap":119},[123,357,358,360,362],{"class":125,"line":126},[123,359,130],{"class":129},[123,361,134],{"class":133},[123,363,138],{"class":137},[123,365,366],{"class":125,"line":141},[123,367,144],{"class":137},[123,369,370,373,376,378,381],{"class":125,"line":147},[123,371,372],{"class":150},"  int",[123,374,375],{"class":137}," age ",[123,377,157],{"class":129},[123,379,380],{"class":150}," 23",[123,382,164],{"class":137},[123,384,385,387,390],{"class":125,"line":167},[123,386,170],{"class":133},[123,388,389],{"class":137},"(age); ",[123,391,392],{"class":176},"// Output: 23\n",[123,394,395],{"class":125,"line":180},[123,396,184],{"emptyLinePlaceholder":183},[123,398,399,402,404,407],{"class":125,"line":187},[123,400,401],{"class":137},"  age ",[123,403,157],{"class":129},[123,405,406],{"class":150}," 24",[123,408,164],{"class":137},[123,410,411,413,415],{"class":125,"line":200},[123,412,170],{"class":133},[123,414,389],{"class":137},[123,416,417],{"class":176},"// Output: 24\n",[123,419,420],{"class":125,"line":210},[123,421,184],{"emptyLinePlaceholder":183},[123,423,424,427,430,432,435],{"class":125,"line":215},[123,425,426],{"class":150},"  double",[123,428,429],{"class":137}," height ",[123,431,157],{"class":129},[123,433,434],{"class":150}," 1.78",[123,436,164],{"class":137},[123,438,439,441,444],{"class":125,"line":250},[123,440,170],{"class":133},[123,442,443],{"class":137},"(height); ",[123,445,446],{"class":176},"// Output: 1.78\n",[123,448,449],{"class":125,"line":261},[123,450,184],{"emptyLinePlaceholder":183},[123,452,453,456,458,461],{"class":125,"line":266},[123,454,455],{"class":137},"  height ",[123,457,157],{"class":129},[123,459,460],{"class":150}," 1.80",[123,462,164],{"class":137},[123,464,465,467,469],{"class":125,"line":299},[123,466,170],{"class":133},[123,468,443],{"class":137},[123,470,471],{"class":176},"// Output: 1.8\n",[123,473,474],{"class":125,"line":316},[123,475,184],{"emptyLinePlaceholder":183},[123,477,479,482,485,487,490],{"class":125,"line":478},15,[123,480,481],{"class":150},"  num",[123,483,484],{"class":137}," weight ",[123,486,157],{"class":129},[123,488,489],{"class":150}," 90.5",[123,491,164],{"class":137},[123,493,495,497,500],{"class":125,"line":494},16,[123,496,170],{"class":133},[123,498,499],{"class":137},"(weight); ",[123,501,502],{"class":176},"// Output: 90.5\n",[123,504,506],{"class":125,"line":505},17,[123,507,184],{"emptyLinePlaceholder":183},[123,509,511,514,516,519],{"class":125,"line":510},18,[123,512,513],{"class":137},"  weight ",[123,515,157],{"class":129},[123,517,518],{"class":150}," 76",[123,520,164],{"class":137},[123,522,524,526,528],{"class":125,"line":523},19,[123,525,170],{"class":133},[123,527,499],{"class":137},[123,529,530],{"class":176},"// Output: 76\n",[123,532,534],{"class":125,"line":533},20,[123,535,319],{"class":137},[14,537,538],{},[539,540,541],"strong",{},"三者本质区别:",[114,543,547],{"className":544,"code":545,"language":546,"meta":119,"style":119},"language-bash shiki shiki-themes github-light github-dark","num\n ├── int\n └── double\n","bash",[18,548,549,554,562],{"__ignoreMap":119},[123,550,551],{"class":125,"line":126},[123,552,553],{"class":133},"num\n",[123,555,556,559],{"class":125,"line":141},[123,557,558],{"class":133}," ├──",[123,560,561],{"class":160}," int\n",[123,563,564,567],{"class":125,"line":147},[123,565,566],{"class":133}," └──",[123,568,569],{"class":160}," double\n",[23,571,572,575],{},[26,573,574],{},"👉 num 是父类",[26,576,577],{},"👉 int 和 double 是子类",[14,579,580],{},[539,581,582],{},"直接赋值规则总表:",[584,585,586,602],"table",{},[587,588,589],"thead",{},[590,591,592,596,599],"tr",{},[593,594,595],"th",{},"赋值方向",[593,597,598],{},"是否可以直接赋值",[593,600,601],{},"说明",[603,604,605,617,626,637,647,657,667,677,686],"tbody",{},[590,606,607,611,614],{},[608,609,610],"td",{},"int → num",[608,612,613],{},"✅ 可以",[608,615,616],{},"子类给父类",[590,618,619,622,624],{},[608,620,621],{},"double → num",[608,623,613],{},[608,625,616],{},[590,627,628,631,634],{},[608,629,630],{},"num → int",[608,632,633],{},"❌ 不行",[608,635,636],{},"可能是 double",[590,638,639,642,644],{},[608,640,641],{},"num → double",[608,643,633],{},[608,645,646],{},"可能是 int",[590,648,649,652,654],{},[608,650,651],{},"int → double",[608,653,633],{},[608,655,656],{},"Dart 不自动转",[590,658,659,662,664],{},[608,660,661],{},"double → int",[608,663,633],{},[608,665,666],{},"会丢失小数",[590,668,669,672,675],{},[608,670,671],{},"int → int",[608,673,674],{},"✅",[608,676],{},[590,678,679,682,684],{},[608,680,681],{},"double → double",[608,683,674],{},[608,685],{},[590,687,688,691,693],{},[608,689,690],{},"num → num",[608,692,674],{},[608,694],{},[14,696,697,698,60,701,704],{},"虽然无法直接赋值,但是可以转化后再赋值.可以利用",[18,699,700],{},"toInt()",[18,702,703],{},"toDouble()","等方法来实现,如:",[114,706,708],{"className":116,"code":707,"language":118,"meta":119,"style":119},"void main()\n{\n  int a = 10;\n  print(a); // Output: 10\n\n  double b = 3.14;\n  print(b); // Output: 3.14\n  \n  // double赋值给double\n  double c = b;\n  print(c); // Output: 3.14\n\n  // int赋值给double\n  b = a.toDouble();\n  print(b); // Output: 10.0\n\n  num d = 5.6;\n  print(d); // Output: 5.6\n\n  // num赋值给int\n  a = d.toInt();\n  print(a); // Output: 5\n\n}\n",[18,709,710,718,722,736,746,750,764,774,779,784,796,805,809,814,830,839,843,857,867,871,876,892,902,907],{"__ignoreMap":119},[123,711,712,714,716],{"class":125,"line":126},[123,713,130],{"class":129},[123,715,134],{"class":133},[123,717,138],{"class":137},[123,719,720],{"class":125,"line":141},[123,721,144],{"class":137},[123,723,724,726,729,731,734],{"class":125,"line":147},[123,725,372],{"class":150},[123,727,728],{"class":137}," a ",[123,730,157],{"class":129},[123,732,733],{"class":150}," 10",[123,735,164],{"class":137},[123,737,738,740,743],{"class":125,"line":167},[123,739,170],{"class":133},[123,741,742],{"class":137},"(a); ",[123,744,745],{"class":176},"// Output: 10\n",[123,747,748],{"class":125,"line":180},[123,749,184],{"emptyLinePlaceholder":183},[123,751,752,754,757,759,762],{"class":125,"line":187},[123,753,426],{"class":150},[123,755,756],{"class":137}," b ",[123,758,157],{"class":129},[123,760,761],{"class":150}," 3.14",[123,763,164],{"class":137},[123,765,766,768,771],{"class":125,"line":200},[123,767,170],{"class":133},[123,769,770],{"class":137},"(b); ",[123,772,773],{"class":176},"// Output: 3.14\n",[123,775,776],{"class":125,"line":210},[123,777,778],{"class":137},"  \n",[123,780,781],{"class":125,"line":215},[123,782,783],{"class":176},"  // double赋值给double\n",[123,785,786,788,791,793],{"class":125,"line":250},[123,787,426],{"class":150},[123,789,790],{"class":137}," c ",[123,792,157],{"class":129},[123,794,795],{"class":137}," b;\n",[123,797,798,800,803],{"class":125,"line":261},[123,799,170],{"class":133},[123,801,802],{"class":137},"(c); ",[123,804,773],{"class":176},[123,806,807],{"class":125,"line":266},[123,808,184],{"emptyLinePlaceholder":183},[123,810,811],{"class":125,"line":299},[123,812,813],{"class":176},"  // int赋值给double\n",[123,815,816,819,821,824,827],{"class":125,"line":316},[123,817,818],{"class":137},"  b ",[123,820,157],{"class":129},[123,822,823],{"class":137}," a.",[123,825,826],{"class":133},"toDouble",[123,828,829],{"class":137},"();\n",[123,831,832,834,836],{"class":125,"line":478},[123,833,170],{"class":133},[123,835,770],{"class":137},[123,837,838],{"class":176},"// Output: 10.0\n",[123,840,841],{"class":125,"line":494},[123,842,184],{"emptyLinePlaceholder":183},[123,844,845,847,850,852,855],{"class":125,"line":505},[123,846,481],{"class":150},[123,848,849],{"class":137}," d ",[123,851,157],{"class":129},[123,853,854],{"class":150}," 5.6",[123,856,164],{"class":137},[123,858,859,861,864],{"class":125,"line":510},[123,860,170],{"class":133},[123,862,863],{"class":137},"(d); ",[123,865,866],{"class":176},"// Output: 5.6\n",[123,868,869],{"class":125,"line":523},[123,870,184],{"emptyLinePlaceholder":183},[123,872,873],{"class":125,"line":533},[123,874,875],{"class":176},"  // num赋值给int\n",[123,877,879,882,884,887,890],{"class":125,"line":878},21,[123,880,881],{"class":137},"  a ",[123,883,157],{"class":129},[123,885,886],{"class":137}," d.",[123,888,889],{"class":133},"toInt",[123,891,829],{"class":137},[123,893,895,897,899],{"class":125,"line":894},22,[123,896,170],{"class":133},[123,898,742],{"class":137},[123,900,901],{"class":176},"// Output: 5\n",[123,903,905],{"class":125,"line":904},23,[123,906,184],{"emptyLinePlaceholder":183},[123,908,910],{"class":125,"line":909},24,[123,911,319],{"class":137},[54,913,914],{"id":914},"布尔类型-bool",[14,916,60,917,63,919,67],{},[18,918,20],{},[18,920,921],{},"bool",[23,923,924,927,930],{},[26,925,926],{},"场景：当我们需要一个属性来表示当前为真(true)或假(false)的时候，需要使用bool关键字声明",[26,928,929],{},"需求：声明当前自己是否已经完成作业",[26,931,78,932],{},[18,933,934],{},"bool 属性名 = true/false;",[114,936,938],{"className":116,"code":937,"language":118,"meta":119,"style":119},"void main()\n{\n  bool isFinishWork = false;\n  print('我的工作完成状态为：$isFinishWork'); //Output: 我的工作完成状态为：false\n  \n  isFinishWork = true;\n  print('我的工作完成状态为：$isFinishWork'); //Output: 我的工作完成状态为：true\n}\n",[18,939,940,948,952,967,989,993,1005,1024],{"__ignoreMap":119},[123,941,942,944,946],{"class":125,"line":126},[123,943,130],{"class":129},[123,945,134],{"class":133},[123,947,138],{"class":137},[123,949,950],{"class":125,"line":141},[123,951,144],{"class":137},[123,953,954,957,960,962,965],{"class":125,"line":147},[123,955,956],{"class":150},"  bool",[123,958,959],{"class":137}," isFinishWork ",[123,961,157],{"class":129},[123,963,964],{"class":150}," false",[123,966,164],{"class":137},[123,968,969,971,973,976,978,981,984,986],{"class":125,"line":167},[123,970,170],{"class":133},[123,972,304],{"class":137},[123,974,975],{"class":160},"'我的工作完成状态为：",[123,977,240],{"class":160},[123,979,980],{"class":150},"isFinishWork",[123,982,983],{"class":160},"'",[123,985,310],{"class":137},[123,987,988],{"class":176},"//Output: 我的工作完成状态为：false\n",[123,990,991],{"class":125,"line":180},[123,992,778],{"class":137},[123,994,995,998,1000,1003],{"class":125,"line":187},[123,996,997],{"class":137},"  isFinishWork ",[123,999,157],{"class":129},[123,1001,1002],{"class":150}," true",[123,1004,164],{"class":137},[123,1006,1007,1009,1011,1013,1015,1017,1019,1021],{"class":125,"line":200},[123,1008,170],{"class":133},[123,1010,304],{"class":137},[123,1012,975],{"class":160},[123,1014,240],{"class":160},[123,1016,980],{"class":150},[123,1018,983],{"class":160},[123,1020,310],{"class":137},[123,1022,1023],{"class":176},"//Output: 我的工作完成状态为：true\n",[123,1025,1026],{"class":125,"line":210},[123,1027,319],{"class":137},[54,1029,1031],{"id":1030},"列表类型-list","列表类型-List",[1033,1034,1036],"h5",{"id":1035},"list","List",[14,1038,60,1039,63,1041,1044,1045,1048,1049,1052,1053,1055,1056,1059,1060,1062,1063,1066],{},[18,1040,20],{},[18,1042,1043],{},"STL","向量",[18,1046,1047],{},"std::vector","基本类似.(注意,和",[18,1050,1051],{},"std::list","并不像)\n而",[18,1054,1047],{},"我们经常把他用作",[18,1057,1058],{},"不定长数组",",所以你不理解",[18,1061,1047],{},"的时候把他当作一个高级的",[18,1064,1065],{},"数组","也可以.",[14,1068,1069,1070,1072],{},"本节肯定讲不完",[18,1071,1036],{},"的所有用法,但是大多数常用的用法都会讲到,你忘记了可以随时去查文档就行,不用每种用法都硬背下来,用的多的用法自然你就记住了,现在你只需要学完一遍,并知道有那么个东西即可.",[14,1074,70],{},[23,1076,1077,1080,1083],{},[26,1078,1079],{},"场景：当一个变量需要存储多个值的时候，可以使用列表类型List",[26,1081,1082],{},"需求：一个班级的学生用List存储，支持对学生的查找、新增、删除、循环",[26,1084,1085,1086,1089],{},"语法：List 属性名 = ",[123,1087,1088],{},"‘学生1’, ‘学生2’",";",[14,1091,1092],{},"常用用法1:",[23,1094,1095,1101,1107,1113,1119],{},[26,1096,1097,1098],{},"在尾部添加-",[18,1099,1100],{},"add(内容)",[26,1102,1103,1104],{},"在尾部添加一个列表-",[18,1105,1106],{},"addAll(列表)",[26,1108,1109,1110],{},"删除满足内容的第一个-",[18,1111,1112],{},"remove(内容)",[26,1114,1115,1116],{},"删除最后一个-",[18,1117,1118],{},"removeLast()",[26,1120,1121,1122,1125],{},"删除索引范围内数据-",[18,1123,1124],{},"removeRange(start,end)"," 注意：end不包含在删除范围内",[14,1127,1128],{},"常用用法2:",[14,1130,1131],{},"下面会列举几个方法与属性,学过面向对象你肯定知道是啥,如果没学过,我就先简单说一下:",[114,1133,1135],{"className":544,"code":1134,"language":546,"meta":119,"style":119},"类-class的声明与定义\n对象-class类型的实例,(不好理解也可以理解为class类型的变量)\n方法-class里的函数\n属性-class里的变量\n",[18,1136,1137,1142,1150,1155],{"__ignoreMap":119},[123,1138,1139],{"class":125,"line":126},[123,1140,1141],{"class":133},"类-class的声明与定义\n",[123,1143,1144,1147],{"class":125,"line":141},[123,1145,1146],{"class":133},"对象-class类型的实例,(不好理解也可以理解为class类型的变量",[123,1148,1149],{"class":137},")\n",[123,1151,1152],{"class":125,"line":147},[123,1153,1154],{"class":133},"方法-class里的函数\n",[123,1156,1157],{"class":125,"line":167},[123,1158,1159],{"class":133},"属性-class里的变量\n",[23,1161,1162,1168,1174,1180,1186,1192,1198],{},[26,1163,1164,1165],{},"循环(方法)-",[18,1166,1167],{},"forEach((item) {});",[26,1169,1170,1171],{},"是否都满足条件(方法)-",[18,1172,1173],{},"every((item) { return 布尔值 })；",[26,1175,1176,1177],{},"筛选出满足条件的数据(方法)-",[18,1178,1179],{},"where((item) { return 布尔值 })；",[26,1181,1182,1183],{},"列表的长度(属性)-",[18,1184,1185],{},"length",[26,1187,1188,1189],{},"最后一个元素(属性)-",[18,1190,1191],{},"last",[26,1193,1194,1195],{},"第一个元素(属性)-",[18,1196,1197],{},"first",[26,1199,1200,1201],{},"是否为空(属性)-",[18,1202,1203],{},"isEmpty",[114,1205,1207],{"className":116,"code":1206,"language":118,"meta":119,"style":119},"void main(List\u003CString> args) \n{\n  List students = [\"张三\", \"李四\", \"王五\"];\n  print(students); // Output: [张三, 李四, 王五]\n\n  students.add(\"新同学\"); // 在尾部进行添加\n  print(students); // Output: [张三, 李四, 王五, 新同学]s\n\n  students.addAll([\"新来的同学1\", \"新来的同学2\"]); // 在尾部添加一个列表\n  print(students); // Output: [张三, 李四, 王五, 新同学, 新来的同学1, 新来的同学2]\n\n  students.add(\"新同学\"); // 在尾部进行添加\n  print(students); // Output: [张三, 李四, 王五, 新同学, 新来的同学1, 新来的同学2, 新同学]\n\n  students.remove(\"新同学\"); // 删除满足内容的第一个\n  print(students); // Output: [张三, 李四, 王五, 新来的同学1, 新来的同学2, 新同学]\n\n  // 删除最后一个同学\n  students.removeLast(); // 删除最后一个\n  print(students); // Output: [张三, 李四, 王五, 新来的同学1, 新来的同学2]\n\n  // 删除前两个同学\n  // start开始的索引 end结束的索引-不包含在删除范围内\n  students.removeRange(0, 2);\n  print(students); // Output: [王五, 新来的同学1, 新来的同学2]\n\n  // forEach针对每个列表每个数据进行操作\n  students.forEach((item) \n  {\n    // 书写逻辑\n    print(item); // Output: 王五\n                 //         新来的同学1\n                 //         新来的同学2\n  });\n\n  // 是不是所有的同学都以新为开头\n  bool isAllStartWithNew = students.every((item) \n  {\n    return item.toString().startsWith(\"新\"); // 返回一个条件\n  });\n  print(isAllStartWithNew); // Output: false (因为王五不以新开头,需要满足所有的同学都以新开头才会返回true)\n\n  // 筛选出所有的以新开头的同学呢\n  List newStudents = students.where((item) \n  {\n    return item.toString().startsWith(\"新\");\n  }).toList();\n  print(newStudents); // Output: [新来的同学1, 新来的同学2]\n\n\n  // List常用的一些属性 方法() .属性\n  // 列表的长度\n  print(students.length); // Output: 3\n\n  // 列表的第一个\n  print(students.first); // Output: 王五\n\n  // 列表的最后一个\n  print(students.last); // Output: 新来的同学2\n\n  // 列表是否是空的\n  print(students.isEmpty); // Output: false (因为列表中有数据)\n}\n",[18,1208,1209,1228,1232,1262,1272,1276,1294,1303,1307,1331,1340,1344,1358,1367,1371,1387,1396,1400,1405,1418,1427,1431,1436,1441,1461,1471,1476,1482,1493,1499,1505,1517,1523,1529,1535,1540,1546,1564,1569,1597,1602,1613,1618,1624,1641,1646,1665,1676,1687,1692,1697,1703,1709,1720,1725,1731,1741,1746,1752,1763,1768,1774,1785],{"__ignoreMap":119},[123,1210,1211,1213,1215,1217,1219,1222,1225],{"class":125,"line":126},[123,1212,130],{"class":129},[123,1214,134],{"class":133},[123,1216,304],{"class":137},[123,1218,1036],{"class":150},[123,1220,1221],{"class":137},"\u003C",[123,1223,1224],{"class":150},"String",[123,1226,1227],{"class":137},"> args) \n",[123,1229,1230],{"class":125,"line":141},[123,1231,144],{"class":137},[123,1233,1234,1237,1240,1242,1245,1248,1251,1254,1256,1259],{"class":125,"line":147},[123,1235,1236],{"class":150},"  List",[123,1238,1239],{"class":137}," students ",[123,1241,157],{"class":129},[123,1243,1244],{"class":137}," [",[123,1246,1247],{"class":160},"\"张三\"",[123,1249,1250],{"class":137},", ",[123,1252,1253],{"class":160},"\"李四\"",[123,1255,1250],{"class":137},[123,1257,1258],{"class":160},"\"王五\"",[123,1260,1261],{"class":137},"];\n",[123,1263,1264,1266,1269],{"class":125,"line":167},[123,1265,170],{"class":133},[123,1267,1268],{"class":137},"(students); ",[123,1270,1271],{"class":176},"// Output: [张三, 李四, 王五]\n",[123,1273,1274],{"class":125,"line":180},[123,1275,184],{"emptyLinePlaceholder":183},[123,1277,1278,1281,1284,1286,1289,1291],{"class":125,"line":187},[123,1279,1280],{"class":137},"  students.",[123,1282,1283],{"class":133},"add",[123,1285,304],{"class":137},[123,1287,1288],{"class":160},"\"新同学\"",[123,1290,310],{"class":137},[123,1292,1293],{"class":176},"// 在尾部进行添加\n",[123,1295,1296,1298,1300],{"class":125,"line":200},[123,1297,170],{"class":133},[123,1299,1268],{"class":137},[123,1301,1302],{"class":176},"// Output: [张三, 李四, 王五, 新同学]s\n",[123,1304,1305],{"class":125,"line":210},[123,1306,184],{"emptyLinePlaceholder":183},[123,1308,1309,1311,1314,1317,1320,1322,1325,1328],{"class":125,"line":215},[123,1310,1280],{"class":137},[123,1312,1313],{"class":133},"addAll",[123,1315,1316],{"class":137},"([",[123,1318,1319],{"class":160},"\"新来的同学1\"",[123,1321,1250],{"class":137},[123,1323,1324],{"class":160},"\"新来的同学2\"",[123,1326,1327],{"class":137},"]); ",[123,1329,1330],{"class":176},"// 在尾部添加一个列表\n",[123,1332,1333,1335,1337],{"class":125,"line":250},[123,1334,170],{"class":133},[123,1336,1268],{"class":137},[123,1338,1339],{"class":176},"// Output: [张三, 李四, 王五, 新同学, 新来的同学1, 新来的同学2]\n",[123,1341,1342],{"class":125,"line":261},[123,1343,184],{"emptyLinePlaceholder":183},[123,1345,1346,1348,1350,1352,1354,1356],{"class":125,"line":266},[123,1347,1280],{"class":137},[123,1349,1283],{"class":133},[123,1351,304],{"class":137},[123,1353,1288],{"class":160},[123,1355,310],{"class":137},[123,1357,1293],{"class":176},[123,1359,1360,1362,1364],{"class":125,"line":299},[123,1361,170],{"class":133},[123,1363,1268],{"class":137},[123,1365,1366],{"class":176},"// Output: [张三, 李四, 王五, 新同学, 新来的同学1, 新来的同学2, 新同学]\n",[123,1368,1369],{"class":125,"line":316},[123,1370,184],{"emptyLinePlaceholder":183},[123,1372,1373,1375,1378,1380,1382,1384],{"class":125,"line":478},[123,1374,1280],{"class":137},[123,1376,1377],{"class":133},"remove",[123,1379,304],{"class":137},[123,1381,1288],{"class":160},[123,1383,310],{"class":137},[123,1385,1386],{"class":176},"// 删除满足内容的第一个\n",[123,1388,1389,1391,1393],{"class":125,"line":494},[123,1390,170],{"class":133},[123,1392,1268],{"class":137},[123,1394,1395],{"class":176},"// Output: [张三, 李四, 王五, 新来的同学1, 新来的同学2, 新同学]\n",[123,1397,1398],{"class":125,"line":505},[123,1399,184],{"emptyLinePlaceholder":183},[123,1401,1402],{"class":125,"line":510},[123,1403,1404],{"class":176},"  // 删除最后一个同学\n",[123,1406,1407,1409,1412,1415],{"class":125,"line":523},[123,1408,1280],{"class":137},[123,1410,1411],{"class":133},"removeLast",[123,1413,1414],{"class":137},"(); ",[123,1416,1417],{"class":176},"// 删除最后一个\n",[123,1419,1420,1422,1424],{"class":125,"line":533},[123,1421,170],{"class":133},[123,1423,1268],{"class":137},[123,1425,1426],{"class":176},"// Output: [张三, 李四, 王五, 新来的同学1, 新来的同学2]\n",[123,1428,1429],{"class":125,"line":878},[123,1430,184],{"emptyLinePlaceholder":183},[123,1432,1433],{"class":125,"line":894},[123,1434,1435],{"class":176},"  // 删除前两个同学\n",[123,1437,1438],{"class":125,"line":904},[123,1439,1440],{"class":176},"  // start开始的索引 end结束的索引-不包含在删除范围内\n",[123,1442,1443,1445,1448,1450,1453,1455,1458],{"class":125,"line":909},[123,1444,1280],{"class":137},[123,1446,1447],{"class":133},"removeRange",[123,1449,304],{"class":137},[123,1451,1452],{"class":150},"0",[123,1454,1250],{"class":137},[123,1456,1457],{"class":150},"2",[123,1459,1460],{"class":137},");\n",[123,1462,1464,1466,1468],{"class":125,"line":1463},25,[123,1465,170],{"class":133},[123,1467,1268],{"class":137},[123,1469,1470],{"class":176},"// Output: [王五, 新来的同学1, 新来的同学2]\n",[123,1472,1474],{"class":125,"line":1473},26,[123,1475,184],{"emptyLinePlaceholder":183},[123,1477,1479],{"class":125,"line":1478},27,[123,1480,1481],{"class":176},"  // forEach针对每个列表每个数据进行操作\n",[123,1483,1485,1487,1490],{"class":125,"line":1484},28,[123,1486,1280],{"class":137},[123,1488,1489],{"class":133},"forEach",[123,1491,1492],{"class":137},"((item) \n",[123,1494,1496],{"class":125,"line":1495},29,[123,1497,1498],{"class":137},"  {\n",[123,1500,1502],{"class":125,"line":1501},30,[123,1503,1504],{"class":176},"    // 书写逻辑\n",[123,1506,1508,1511,1514],{"class":125,"line":1507},31,[123,1509,1510],{"class":133},"    print",[123,1512,1513],{"class":137},"(item); ",[123,1515,1516],{"class":176},"// Output: 王五\n",[123,1518,1520],{"class":125,"line":1519},32,[123,1521,1522],{"class":176},"                 //         新来的同学1\n",[123,1524,1526],{"class":125,"line":1525},33,[123,1527,1528],{"class":176},"                 //         新来的同学2\n",[123,1530,1532],{"class":125,"line":1531},34,[123,1533,1534],{"class":137},"  });\n",[123,1536,1538],{"class":125,"line":1537},35,[123,1539,184],{"emptyLinePlaceholder":183},[123,1541,1543],{"class":125,"line":1542},36,[123,1544,1545],{"class":176},"  // 是不是所有的同学都以新为开头\n",[123,1547,1549,1551,1554,1556,1559,1562],{"class":125,"line":1548},37,[123,1550,956],{"class":150},[123,1552,1553],{"class":137}," isAllStartWithNew ",[123,1555,157],{"class":129},[123,1557,1558],{"class":137}," students.",[123,1560,1561],{"class":133},"every",[123,1563,1492],{"class":137},[123,1565,1567],{"class":125,"line":1566},38,[123,1568,1498],{"class":137},[123,1570,1572,1575,1578,1581,1584,1587,1589,1592,1594],{"class":125,"line":1571},39,[123,1573,1574],{"class":129},"    return",[123,1576,1577],{"class":137}," item.",[123,1579,1580],{"class":133},"toString",[123,1582,1583],{"class":137},"().",[123,1585,1586],{"class":133},"startsWith",[123,1588,304],{"class":137},[123,1590,1591],{"class":160},"\"新\"",[123,1593,310],{"class":137},[123,1595,1596],{"class":176},"// 返回一个条件\n",[123,1598,1600],{"class":125,"line":1599},40,[123,1601,1534],{"class":137},[123,1603,1605,1607,1610],{"class":125,"line":1604},41,[123,1606,170],{"class":133},[123,1608,1609],{"class":137},"(isAllStartWithNew); ",[123,1611,1612],{"class":176},"// Output: false (因为王五不以新开头,需要满足所有的同学都以新开头才会返回true)\n",[123,1614,1616],{"class":125,"line":1615},42,[123,1617,184],{"emptyLinePlaceholder":183},[123,1619,1621],{"class":125,"line":1620},43,[123,1622,1623],{"class":176},"  // 筛选出所有的以新开头的同学呢\n",[123,1625,1627,1629,1632,1634,1636,1639],{"class":125,"line":1626},44,[123,1628,1236],{"class":150},[123,1630,1631],{"class":137}," newStudents ",[123,1633,157],{"class":129},[123,1635,1558],{"class":137},[123,1637,1638],{"class":133},"where",[123,1640,1492],{"class":137},[123,1642,1644],{"class":125,"line":1643},45,[123,1645,1498],{"class":137},[123,1647,1649,1651,1653,1655,1657,1659,1661,1663],{"class":125,"line":1648},46,[123,1650,1574],{"class":129},[123,1652,1577],{"class":137},[123,1654,1580],{"class":133},[123,1656,1583],{"class":137},[123,1658,1586],{"class":133},[123,1660,304],{"class":137},[123,1662,1591],{"class":160},[123,1664,1460],{"class":137},[123,1666,1668,1671,1674],{"class":125,"line":1667},47,[123,1669,1670],{"class":137},"  }).",[123,1672,1673],{"class":133},"toList",[123,1675,829],{"class":137},[123,1677,1679,1681,1684],{"class":125,"line":1678},48,[123,1680,170],{"class":133},[123,1682,1683],{"class":137},"(newStudents); ",[123,1685,1686],{"class":176},"// Output: [新来的同学1, 新来的同学2]\n",[123,1688,1690],{"class":125,"line":1689},49,[123,1691,184],{"emptyLinePlaceholder":183},[123,1693,1695],{"class":125,"line":1694},50,[123,1696,184],{"emptyLinePlaceholder":183},[123,1698,1700],{"class":125,"line":1699},51,[123,1701,1702],{"class":176},"  // List常用的一些属性 方法() .属性\n",[123,1704,1706],{"class":125,"line":1705},52,[123,1707,1708],{"class":176},"  // 列表的长度\n",[123,1710,1712,1714,1717],{"class":125,"line":1711},53,[123,1713,170],{"class":133},[123,1715,1716],{"class":137},"(students.length); ",[123,1718,1719],{"class":176},"// Output: 3\n",[123,1721,1723],{"class":125,"line":1722},54,[123,1724,184],{"emptyLinePlaceholder":183},[123,1726,1728],{"class":125,"line":1727},55,[123,1729,1730],{"class":176},"  // 列表的第一个\n",[123,1732,1734,1736,1739],{"class":125,"line":1733},56,[123,1735,170],{"class":133},[123,1737,1738],{"class":137},"(students.first); ",[123,1740,1516],{"class":176},[123,1742,1744],{"class":125,"line":1743},57,[123,1745,184],{"emptyLinePlaceholder":183},[123,1747,1749],{"class":125,"line":1748},58,[123,1750,1751],{"class":176},"  // 列表的最后一个\n",[123,1753,1755,1757,1760],{"class":125,"line":1754},59,[123,1756,170],{"class":133},[123,1758,1759],{"class":137},"(students.last); ",[123,1761,1762],{"class":176},"// Output: 新来的同学2\n",[123,1764,1766],{"class":125,"line":1765},60,[123,1767,184],{"emptyLinePlaceholder":183},[123,1769,1771],{"class":125,"line":1770},61,[123,1772,1773],{"class":176},"  // 列表是否是空的\n",[123,1775,1777,1779,1782],{"class":125,"line":1776},62,[123,1778,170],{"class":133},[123,1780,1781],{"class":137},"(students.isEmpty); ",[123,1783,1784],{"class":176},"// Output: false (因为列表中有数据)\n",[123,1786,1788],{"class":125,"line":1787},63,[123,1789,319],{"class":137},[1033,1791,1792],{"id":1792},"main函数入口参数",[14,1794,1795,1796,1799,1800,1802,1803],{},"除了上面的代码外可以看到",[18,1797,1798],{},"void main(List\u003CString> args)","里有参数了,这个其实类似",[18,1801,20],{},"里的",[18,1804,1805],{},"int main(int argc, char* argv[])",[584,1807,1808,1820],{},[587,1809,1810],{},[590,1811,1812,1815,1817],{},[593,1813,1814],{},"对比点",[593,1816,20],{},[593,1818,1819],{},"Dart",[603,1821,1822,1837,1852,1866,1877],{},[590,1823,1824,1827,1832],{},[608,1825,1826],{},"参数个数",[608,1828,1829],{},[18,1830,1831],{},"argc",[608,1833,1834],{},[18,1835,1836],{},"args.length",[590,1838,1839,1842,1847],{},[608,1840,1841],{},"参数数组",[608,1843,1844],{},[18,1845,1846],{},"argv[]",[608,1848,1849],{},[18,1850,1851],{},"List\u003CString>",[590,1853,1854,1857,1863],{},[608,1855,1856],{},"是否包含程序名",[608,1858,1859,1860,1862],{},"✅ argv",[123,1861,1452],{}," 是程序名",[608,1864,1865],{},"❌ 不包含",[590,1867,1868,1871,1874],{},[608,1869,1870],{},"类型安全",[608,1872,1873],{},"❌ char*",[608,1875,1876],{},"✅ String",[590,1878,1879,1882,1885],{},[608,1880,1881],{},"内存管理",[608,1883,1884],{},"手动",[608,1886,1887],{},"自动",[14,1889,1890],{},"例如",[114,1892,1894],{"className":544,"code":1893,"language":546,"meta":119,"style":119},"dart run app.dart hello world\n",[18,1895,1896],{"__ignoreMap":119},[123,1897,1898,1900,1903,1906,1909],{"class":125,"line":126},[123,1899,118],{"class":133},[123,1901,1902],{"class":160}," run",[123,1904,1905],{"class":160}," app.dart",[123,1907,1908],{"class":160}," hello",[123,1910,1911],{"class":160}," world\n",[14,1913,1914],{},"此时",[114,1916,1918],{"className":544,"code":1917,"language":546,"meta":119,"style":119},"args[0] = \"hello\"\nargs[1] = \"world\"\n",[18,1919,1920,1930],{"__ignoreMap":119},[123,1921,1922,1925,1927],{"class":125,"line":126},[123,1923,1924],{"class":133},"args[0]",[123,1926,274],{"class":160},[123,1928,1929],{"class":160}," \"hello\"\n",[123,1931,1932,1935,1937],{"class":125,"line":141},[123,1933,1934],{"class":133},"args[1]",[123,1936,274],{"class":160},[123,1938,1939],{"class":160}," \"world\"\n",[54,1941,1943],{"id":1942},"字典类型-map","字典类型-Map",[14,1945,1946,1947,285],{},"类似C++的",[18,1948,1949],{},"std::map",[14,1951,70],{},[23,1953,1954,1957,1960],{},[26,1955,1956],{},"一个key对应一个value",[26,1958,1959],{},"语法1：Map 属性名 = { key: value };",[26,1961,1962,1963],{},"语法2： ",[18,1964,1965],{},"字典[key] 可以取值和赋值",[14,1967,1968],{},"常用用法:",[23,1970,1971,1976,1981,1987,1992],{},[26,1972,1973,1974],{},"循环-",[18,1975,1489],{},[26,1977,1978,1979],{},"在添加一个字典-",[18,1980,1313],{},[26,1982,1983,1984],{},"是否包含某个key-",[18,1985,1986],{},"containsKey",[26,1988,1989,1990],{},"删除某个key-",[18,1991,1377],{},[26,1993,1994,1995],{},"清空-",[18,1996,1997],{},"clear",[114,1999,2001],{"className":116,"code":2000,"language":118,"meta":119,"style":119},"void main(List\u003CString> args) \n{\n  Map transMap = {\"lunch\": '午饭', \"morning\": \"早上\", \"hello\": '你好'};\n  print(transMap);\n  // 通过英文找到对应中文的描述\n  print(transMap[\"morning\"]);\n  transMap[\"hello\"] = \"你非常好\";\n  print(transMap[\"hello\"]);\n  // 字典里面有很多对应关系\n  transMap.forEach((key, value) {\n    print(\"$key,$value\");\n  });\n  // addAll 给当前字典添加一个字典\n  transMap.addAll({\"fine\": \"非常好\"});\n  print(transMap);\n  // containesKey判断字典中是否包含某个key\n  print(transMap.containsKey(\"fine\"));\n\n  transMap.remove(\"fine\");\n  print(transMap);\n\n  // 清空字典\n  transMap.clear();\n  print(transMap);\n}\n\n",[18,2002,2003,2019,2023,2068,2075,2080,2092,2109,2119,2124,2134,2159,2163,2168,2188,2194,2199,2215,2219,2231,2237,2241,2246,2254,2260],{"__ignoreMap":119},[123,2004,2005,2007,2009,2011,2013,2015,2017],{"class":125,"line":126},[123,2006,130],{"class":129},[123,2008,134],{"class":133},[123,2010,304],{"class":137},[123,2012,1036],{"class":150},[123,2014,1221],{"class":137},[123,2016,1224],{"class":150},[123,2018,1227],{"class":137},[123,2020,2021],{"class":125,"line":141},[123,2022,144],{"class":137},[123,2024,2025,2028,2031,2033,2036,2039,2042,2045,2047,2050,2052,2055,2057,2060,2062,2065],{"class":125,"line":147},[123,2026,2027],{"class":150},"  Map",[123,2029,2030],{"class":137}," transMap ",[123,2032,157],{"class":129},[123,2034,2035],{"class":137}," {",[123,2037,2038],{"class":160},"\"lunch\"",[123,2040,2041],{"class":129},":",[123,2043,2044],{"class":160}," '午饭'",[123,2046,1250],{"class":137},[123,2048,2049],{"class":160},"\"morning\"",[123,2051,2041],{"class":129},[123,2053,2054],{"class":160}," \"早上\"",[123,2056,1250],{"class":137},[123,2058,2059],{"class":160},"\"hello\"",[123,2061,2041],{"class":129},[123,2063,2064],{"class":160}," '你好'",[123,2066,2067],{"class":137},"};\n",[123,2069,2070,2072],{"class":125,"line":167},[123,2071,170],{"class":133},[123,2073,2074],{"class":137},"(transMap);\n",[123,2076,2077],{"class":125,"line":180},[123,2078,2079],{"class":176},"  // 通过英文找到对应中文的描述\n",[123,2081,2082,2084,2087,2089],{"class":125,"line":187},[123,2083,170],{"class":133},[123,2085,2086],{"class":137},"(transMap[",[123,2088,2049],{"class":160},[123,2090,2091],{"class":137},"]);\n",[123,2093,2094,2097,2099,2102,2104,2107],{"class":125,"line":200},[123,2095,2096],{"class":137},"  transMap[",[123,2098,2059],{"class":160},[123,2100,2101],{"class":137},"] ",[123,2103,157],{"class":129},[123,2105,2106],{"class":160}," \"你非常好\"",[123,2108,164],{"class":137},[123,2110,2111,2113,2115,2117],{"class":125,"line":210},[123,2112,170],{"class":133},[123,2114,2086],{"class":137},[123,2116,2059],{"class":160},[123,2118,2091],{"class":137},[123,2120,2121],{"class":125,"line":215},[123,2122,2123],{"class":176},"  // 字典里面有很多对应关系\n",[123,2125,2126,2129,2131],{"class":125,"line":250},[123,2127,2128],{"class":137},"  transMap.",[123,2130,1489],{"class":133},[123,2132,2133],{"class":137},"((key, value) {\n",[123,2135,2136,2138,2140,2143,2145,2148,2150,2152,2155,2157],{"class":125,"line":261},[123,2137,1510],{"class":133},[123,2139,304],{"class":137},[123,2141,2142],{"class":160},"\"",[123,2144,240],{"class":160},[123,2146,2147],{"class":150},"key",[123,2149,331],{"class":160},[123,2151,240],{"class":160},[123,2153,2154],{"class":150},"value",[123,2156,2142],{"class":160},[123,2158,1460],{"class":137},[123,2160,2161],{"class":125,"line":266},[123,2162,1534],{"class":137},[123,2164,2165],{"class":125,"line":299},[123,2166,2167],{"class":176},"  // addAll 给当前字典添加一个字典\n",[123,2169,2170,2172,2174,2177,2180,2182,2185],{"class":125,"line":316},[123,2171,2128],{"class":137},[123,2173,1313],{"class":133},[123,2175,2176],{"class":137},"({",[123,2178,2179],{"class":160},"\"fine\"",[123,2181,2041],{"class":129},[123,2183,2184],{"class":160}," \"非常好\"",[123,2186,2187],{"class":137},"});\n",[123,2189,2190,2192],{"class":125,"line":478},[123,2191,170],{"class":133},[123,2193,2074],{"class":137},[123,2195,2196],{"class":125,"line":494},[123,2197,2198],{"class":176},"  // containesKey判断字典中是否包含某个key\n",[123,2200,2201,2203,2206,2208,2210,2212],{"class":125,"line":505},[123,2202,170],{"class":133},[123,2204,2205],{"class":137},"(transMap.",[123,2207,1986],{"class":133},[123,2209,304],{"class":137},[123,2211,2179],{"class":160},[123,2213,2214],{"class":137},"));\n",[123,2216,2217],{"class":125,"line":510},[123,2218,184],{"emptyLinePlaceholder":183},[123,2220,2221,2223,2225,2227,2229],{"class":125,"line":523},[123,2222,2128],{"class":137},[123,2224,1377],{"class":133},[123,2226,304],{"class":137},[123,2228,2179],{"class":160},[123,2230,1460],{"class":137},[123,2232,2233,2235],{"class":125,"line":533},[123,2234,170],{"class":133},[123,2236,2074],{"class":137},[123,2238,2239],{"class":125,"line":878},[123,2240,184],{"emptyLinePlaceholder":183},[123,2242,2243],{"class":125,"line":894},[123,2244,2245],{"class":176},"  // 清空字典\n",[123,2247,2248,2250,2252],{"class":125,"line":904},[123,2249,2128],{"class":137},[123,2251,1997],{"class":133},[123,2253,829],{"class":137},[123,2255,2256,2258],{"class":125,"line":909},[123,2257,170],{"class":133},[123,2259,2074],{"class":137},[123,2261,2262],{"class":125,"line":1463},[123,2263,319],{"class":137},[54,2265,2266],{"id":2266},"动态类型-dynamic",[14,2268,1946,2269],{},[18,2270,2271],{},"std::any",[23,2273,2274,2277,2280],{},[26,2275,2276],{},"定义：Dart语言中，dynamic用来声明动态类型",[26,2278,2279],{},"特点：允许变量运行时自由改变类型, 同时绕过编译时的静态检查",[26,2281,2282,2283],{},"语法1：",[18,2284,2285],{},"dynamic 属性名 = 值;",[114,2287,2289],{"className":116,"code":2288,"language":118,"meta":119,"style":119},"void main(List\u003CString> args) \n{\n  // dynamic 可以动态的改变类型\n  dynamic name = \"张三\";\n  print(name);\n  name = 123;\n  print(name);\n}\n",[18,2290,2291,2307,2311,2316,2330,2337,2348,2354],{"__ignoreMap":119},[123,2292,2293,2295,2297,2299,2301,2303,2305],{"class":125,"line":126},[123,2294,130],{"class":129},[123,2296,134],{"class":133},[123,2298,304],{"class":137},[123,2300,1036],{"class":150},[123,2302,1221],{"class":137},[123,2304,1224],{"class":150},[123,2306,1227],{"class":137},[123,2308,2309],{"class":125,"line":141},[123,2310,144],{"class":137},[123,2312,2313],{"class":125,"line":147},[123,2314,2315],{"class":176},"  // dynamic 可以动态的改变类型\n",[123,2317,2318,2321,2323,2325,2328],{"class":125,"line":167},[123,2319,2320],{"class":150},"  dynamic",[123,2322,154],{"class":137},[123,2324,157],{"class":129},[123,2326,2327],{"class":160}," \"张三\"",[123,2329,164],{"class":137},[123,2331,2332,2334],{"class":125,"line":180},[123,2333,170],{"class":133},[123,2335,2336],{"class":137},"(name);\n",[123,2338,2339,2341,2343,2346],{"class":125,"line":187},[123,2340,190],{"class":137},[123,2342,157],{"class":129},[123,2344,2345],{"class":150}," 123",[123,2347,164],{"class":137},[123,2349,2350,2352],{"class":125,"line":200},[123,2351,170],{"class":133},[123,2353,2336],{"class":137},[123,2355,2356],{"class":125,"line":210},[123,2357,319],{"class":137},[14,2359,2360],{},"只有你自己100%认为你写的是对的,再用dynamic,否则别用dynamic,不然可能会出现很多错误.",[54,2362,2363],{"id":2363},"自动推导类型-var",[14,2365,2366,2367,285],{},"类似C/C++的",[18,2368,2369],{},"auto",[14,2371,2372],{},"这个关键字可以自动推导变量的类型.",[23,2374,2375,2378,2383],{},[26,2376,2377],{},"关键字：var",[26,2379,78,2380],{},[18,2381,2382],{},"var 变量名 = 值/表达式;",[26,2384,2385],{},"注意：使用var声明的变量，其类型在第一次赋值之后确定，不能再赋值其他类型的值",[114,2387,2389],{"className":116,"code":2388,"language":118,"meta":119,"style":119},"void main(List\u003CString> args) \n{\n  var name = '张三';\n  print(name); // Output: 张三\n\n  name = '李四';\n  print(name); // Output: 李四\n\n  var age = 30;\n  print(age); // Output: 30\n\n  var isStudent = true;\n  print(isStudent); // Output: true\n\n  var height = 1.75;\n  print(height); // Output: 1.75\n}\n",[18,2390,2391,2407,2411,2425,2434,2438,2449,2458,2462,2475,2484,2488,2501,2511,2515,2528,2537],{"__ignoreMap":119},[123,2392,2393,2395,2397,2399,2401,2403,2405],{"class":125,"line":126},[123,2394,130],{"class":129},[123,2396,134],{"class":133},[123,2398,304],{"class":137},[123,2400,1036],{"class":150},[123,2402,1221],{"class":137},[123,2404,1224],{"class":150},[123,2406,1227],{"class":137},[123,2408,2409],{"class":125,"line":141},[123,2410,144],{"class":137},[123,2412,2413,2416,2418,2420,2423],{"class":125,"line":147},[123,2414,2415],{"class":129},"  var",[123,2417,154],{"class":137},[123,2419,157],{"class":129},[123,2421,2422],{"class":160}," '张三'",[123,2424,164],{"class":137},[123,2426,2427,2429,2431],{"class":125,"line":167},[123,2428,170],{"class":133},[123,2430,173],{"class":137},[123,2432,2433],{"class":176},"// Output: 张三\n",[123,2435,2436],{"class":125,"line":180},[123,2437,184],{"emptyLinePlaceholder":183},[123,2439,2440,2442,2444,2447],{"class":125,"line":187},[123,2441,190],{"class":137},[123,2443,157],{"class":129},[123,2445,2446],{"class":160}," '李四'",[123,2448,164],{"class":137},[123,2450,2451,2453,2455],{"class":125,"line":200},[123,2452,170],{"class":133},[123,2454,173],{"class":137},[123,2456,2457],{"class":176},"// Output: 李四\n",[123,2459,2460],{"class":125,"line":210},[123,2461,184],{"emptyLinePlaceholder":183},[123,2463,2464,2466,2468,2470,2473],{"class":125,"line":215},[123,2465,2415],{"class":129},[123,2467,375],{"class":137},[123,2469,157],{"class":129},[123,2471,2472],{"class":150}," 30",[123,2474,164],{"class":137},[123,2476,2477,2479,2481],{"class":125,"line":250},[123,2478,170],{"class":133},[123,2480,389],{"class":137},[123,2482,2483],{"class":176},"// Output: 30\n",[123,2485,2486],{"class":125,"line":261},[123,2487,184],{"emptyLinePlaceholder":183},[123,2489,2490,2492,2495,2497,2499],{"class":125,"line":266},[123,2491,2415],{"class":129},[123,2493,2494],{"class":137}," isStudent ",[123,2496,157],{"class":129},[123,2498,1002],{"class":150},[123,2500,164],{"class":137},[123,2502,2503,2505,2508],{"class":125,"line":299},[123,2504,170],{"class":133},[123,2506,2507],{"class":137},"(isStudent); ",[123,2509,2510],{"class":176},"// Output: true\n",[123,2512,2513],{"class":125,"line":316},[123,2514,184],{"emptyLinePlaceholder":183},[123,2516,2517,2519,2521,2523,2526],{"class":125,"line":478},[123,2518,2415],{"class":129},[123,2520,429],{"class":137},[123,2522,157],{"class":129},[123,2524,2525],{"class":150}," 1.75",[123,2527,164],{"class":137},[123,2529,2530,2532,2534],{"class":125,"line":494},[123,2531,170],{"class":133},[123,2533,443],{"class":137},[123,2535,2536],{"class":176},"// Output: 1.75\n",[123,2538,2539],{"class":125,"line":505},[123,2540,319],{"class":137},[14,2542,2543],{},[539,2544,2545],{},"Dart中的动态类型-dynamic和var的区别:",[23,2547,2548,2551],{},[26,2549,2550],{},"dynamic： 运行时可自由改变类型，无编译检查，方法和属性直接调用",[26,2552,2553],{},"var: 根据初始值进行推断类型，确定类型后类型确定，有编译检查，仅限推断的属性和方法",[54,2555,2557],{"id":2556},"常量声明-constfinal","常量声明-const/final",[1033,2559,2560],{"id":2560},"const",[14,2562,1946,2563,285],{},[18,2564,2565],{},"constexpr",[23,2567,2568,2571,2574],{},[26,2569,2570],{},"关键字：const",[26,2572,2573],{},"语法：const 属性名 = 值/表达式;",[26,2575,2576],{},"特点：const是代码编译前被确定，不允许表达式中有变量存在，必须为常量或者固定值",[114,2578,2580],{"className":116,"code":2579,"language":118,"meta":119,"style":119},"void main(List\u003CString> args) \n{\n  const int a = 10;\n  const double b = 3.14;\n  const String c = \"Hello, Dart!\";\n\n  print(\"Value of a: ${a}\"); // Output: Value of a: 10\n  print(\"Value of b: ${b}\"); // Output: Value of b: 3.14\n  print(\"Value of c: ${c}\"); // Output: Value of c: Hello, Dart!\n}\n",[18,2581,2582,2598,2602,2618,2633,2649,2653,2676,2699,2722],{"__ignoreMap":119},[123,2583,2584,2586,2588,2590,2592,2594,2596],{"class":125,"line":126},[123,2585,130],{"class":129},[123,2587,134],{"class":133},[123,2589,304],{"class":137},[123,2591,1036],{"class":150},[123,2593,1221],{"class":137},[123,2595,1224],{"class":150},[123,2597,1227],{"class":137},[123,2599,2600],{"class":125,"line":141},[123,2601,144],{"class":137},[123,2603,2604,2607,2610,2612,2614,2616],{"class":125,"line":147},[123,2605,2606],{"class":129},"  const",[123,2608,2609],{"class":150}," int",[123,2611,728],{"class":137},[123,2613,157],{"class":129},[123,2615,733],{"class":150},[123,2617,164],{"class":137},[123,2619,2620,2622,2625,2627,2629,2631],{"class":125,"line":167},[123,2621,2606],{"class":129},[123,2623,2624],{"class":150}," double",[123,2626,756],{"class":137},[123,2628,157],{"class":129},[123,2630,761],{"class":150},[123,2632,164],{"class":137},[123,2634,2635,2637,2640,2642,2644,2647],{"class":125,"line":180},[123,2636,2606],{"class":129},[123,2638,2639],{"class":150}," String",[123,2641,790],{"class":137},[123,2643,157],{"class":129},[123,2645,2646],{"class":160}," \"Hello, Dart!\"",[123,2648,164],{"class":137},[123,2650,2651],{"class":125,"line":187},[123,2652,184],{"emptyLinePlaceholder":183},[123,2654,2655,2657,2659,2662,2664,2667,2669,2671,2673],{"class":125,"line":200},[123,2656,170],{"class":133},[123,2658,304],{"class":137},[123,2660,2661],{"class":160},"\"Value of a: ",[123,2663,228],{"class":160},[123,2665,2666],{"class":150},"a",[123,2668,234],{"class":160},[123,2670,2142],{"class":160},[123,2672,310],{"class":137},[123,2674,2675],{"class":176},"// Output: Value of a: 10\n",[123,2677,2678,2680,2682,2685,2687,2690,2692,2694,2696],{"class":125,"line":210},[123,2679,170],{"class":133},[123,2681,304],{"class":137},[123,2683,2684],{"class":160},"\"Value of b: ",[123,2686,228],{"class":160},[123,2688,2689],{"class":150},"b",[123,2691,234],{"class":160},[123,2693,2142],{"class":160},[123,2695,310],{"class":137},[123,2697,2698],{"class":176},"// Output: Value of b: 3.14\n",[123,2700,2701,2703,2705,2708,2710,2713,2715,2717,2719],{"class":125,"line":215},[123,2702,170],{"class":133},[123,2704,304],{"class":137},[123,2706,2707],{"class":160},"\"Value of c: ",[123,2709,228],{"class":160},[123,2711,2712],{"class":150},"c",[123,2714,234],{"class":160},[123,2716,2142],{"class":160},[123,2718,310],{"class":137},[123,2720,2721],{"class":176},"// Output: Value of c: Hello, Dart!\n",[123,2723,2724],{"class":125,"line":250},[123,2725,319],{"class":137},[1033,2727,2728],{"id":2728},"final",[14,2730,1946,2731,285],{},[18,2732,2560],{},[23,2734,2735,2738,2741],{},[26,2736,2737],{},"关键字：final",[26,2739,2740],{},"语法：final 属性名 = 值/表达式;",[26,2742,2743],{},"特点：final变量在运行时被初始化，其值设置后不可更改",[114,2745,2747],{"className":116,"code":2746,"language":118,"meta":119,"style":119},"void main(List\u003CString> args) \n{\n  final time = DateTime.now();\n  print('Current time: $time'); // Current time: 2026-02-16 20:53:53.045010\n}\n",[18,2748,2749,2765,2769,2788,2809],{"__ignoreMap":119},[123,2750,2751,2753,2755,2757,2759,2761,2763],{"class":125,"line":126},[123,2752,130],{"class":129},[123,2754,134],{"class":133},[123,2756,304],{"class":137},[123,2758,1036],{"class":150},[123,2760,1221],{"class":137},[123,2762,1224],{"class":150},[123,2764,1227],{"class":137},[123,2766,2767],{"class":125,"line":141},[123,2768,144],{"class":137},[123,2770,2771,2774,2777,2779,2782,2784,2786],{"class":125,"line":147},[123,2772,2773],{"class":129},"  final",[123,2775,2776],{"class":137}," time ",[123,2778,157],{"class":129},[123,2780,2781],{"class":150}," DateTime",[123,2783,285],{"class":137},[123,2785,288],{"class":133},[123,2787,829],{"class":137},[123,2789,2790,2792,2794,2797,2799,2802,2804,2806],{"class":125,"line":167},[123,2791,170],{"class":133},[123,2793,304],{"class":137},[123,2795,2796],{"class":160},"'Current time: ",[123,2798,240],{"class":160},[123,2800,2801],{"class":150},"time",[123,2803,983],{"class":160},[123,2805,310],{"class":137},[123,2807,2808],{"class":176},"// Current time: 2026-02-16 20:53:53.045010\n",[123,2810,2811],{"class":125,"line":180},[123,2812,319],{"class":137},[23,2814,2815,2818,2821],{},[26,2816,2817],{},"变量：当需要存储一个变化的数据需要使用var来声明变量",[26,2819,2820],{},"编译时常量：当需要存储一个不变的数据，且在编译时就确定，需要使用const声明常量",[26,2822,2823],{},"运行时常量：当需要存储一个不变的数据，但是在运行时才确定，需要使用final声明常量",[584,2825,2826,2847],{},[587,2827,2828],{},[590,2829,2830,2833,2835,2838,2841,2844],{},[593,2831,2832],{},"概念",[593,2834,1819],{},[593,2836,2837],{},"C++",[593,2839,2840],{},"是否编译期常量",[593,2842,2843],{},"是否可运行期确定",[593,2845,2846],{},"是否对象不可变",[603,2848,2849,2869,2889],{},[590,2850,2851,2854,2858,2862,2865,2867],{},[608,2852,2853],{},"只赋值一次",[608,2855,2856],{},[18,2857,2728],{},[608,2859,2860],{},[18,2861,2560],{},[608,2863,2864],{},"❌",[608,2866,674],{},[608,2868,2864],{},[590,2870,2871,2874,2878,2882,2884,2886],{},[608,2872,2873],{},"编译期常量",[608,2875,2876],{},[18,2877,2560],{},[608,2879,2880],{},[18,2881,2565],{},[608,2883,674],{},[608,2885,2864],{},[608,2887,2888],{},"✅（Dart更强）",[590,2890,2891,2894,2897,2901,2903,2905],{},[608,2892,2893],{},"只读变量",[608,2895,2896],{},"无完全等价",[608,2898,2899],{},[18,2900,2560],{},[608,2902,2864],{},[608,2904,674],{},[608,2906,2864],{},[10,2908,2909],{"id":2909},"空安全机制",[23,2911,2912,2915],{},[26,2913,2914],{},"定义：在Dart语言中，通过编译静态检查将运行时空指针提前暴露",[26,2916,2917],{},"特点：将空指针异常从运行时提前至编译时，减少线上崩溃",[14,2919,2920],{},[539,2921,2922],{},"常用空安全操作符",[584,2924,2925,2942],{},[587,2926,2927],{},[590,2928,2929,2933,2936,2939],{},[593,2930,2932],{"align":2931},"left","操作符",[593,2934,2935],{"align":2931},"符号",[593,2937,2938],{"align":2931},"作用",[593,2940,2941],{"align":2931},"示例",[603,2943,2944,2962,2981,3000,3019],{},[590,2945,2946,2949,2953,2956],{},[608,2947,2948],{"align":2931},"可空类型",[608,2950,2951],{"align":2931},[18,2952,237],{},[608,2954,2955],{"align":2931},"声明可空变量",[608,2957,2958,2961],{"align":2931},[18,2959,2960],{},"String?"," → 允许 String 或 null",[590,2963,2964,2967,2972,2975],{},[608,2965,2966],{"align":2931},"安全访问",[608,2968,2969],{"align":2931},[18,2970,2971],{},"?.",[608,2973,2974],{"align":2931},"对象为 null 时跳过操作，返回 null",[608,2976,2977,2980],{"align":2931},[18,2978,2979],{},"user?.name"," → 若 user 为 null 则返回 null",[590,2982,2983,2986,2991,2994],{},[608,2984,2985],{"align":2931},"非空断言",[608,2987,2988],{"align":2931},[18,2989,2990],{},"!.",[608,2992,2993],{"align":2931},"开发者保证变量非空（否则运行时崩溃）",[608,2995,2996,2999],{"align":2931},[18,2997,2998],{},"name!.length"," → 断言 name 非空",[590,3001,3002,3005,3010,3013],{},[608,3003,3004],{"align":2931},"空合并",[608,3006,3007],{"align":2931},[18,3008,3009],{},"??",[608,3011,3012],{"align":2931},"左侧为 null 时返回右侧默认值",[608,3014,3015,3018],{"align":2931},[18,3016,3017],{},"name ?? \"Guest\""," → name 为 null 时返回 \"Guest\"",[590,3020,3021,3024,3029,3032],{},[608,3022,3023],{"align":2931},"空合并赋值",[608,3025,3026],{"align":2931},[18,3027,3028],{},"??=",[608,3030,3031],{"align":2931},"变量为 null 时才赋值",[608,3033,3034],{"align":2931},[18,3035,3036],{},"name ??= \"Guest\"",[3038,3039,3040],"style",{},"html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":119,"searchDepth":141,"depth":141,"links":3042},[3043,3044,3045],{"id":12,"depth":147,"text":12},{"id":45,"depth":147,"text":46},{"id":2909,"depth":147,"text":2909},"4",4000000,"2026-02-16","2026-02-16-flutter-jiao-cheng","/wiki/2026-02-16-flutter-jiao-cheng","Flutter教程","md",false,null,{},"/wiki/2026-02-16-flutter-jiao-cheng/ch4-dart-yu-yan-jiao-cheng",{"title":5,"description":119},"wiki/2026-02-16-Flutter教程/ch4-Dart语言教程","4rejmLS0haGArLnWN8zzFJKlQ-M-3stukng2NE9GfmA",[3061,3067,3072,3078,3079],{"path":3062,"stem":3063,"title":3064,"date":3048,"chapter":3065,"chapterSort":3066,"docKey":3049,"docRoot":3050,"docTitle":3051,"isWikiDoc":183,"isWikiIndex":3053},"/wiki/2026-02-16-flutter-jiao-cheng/ch1-jian-jie","wiki/2026-02-16-Flutter教程/ch1-简介","简介","1",1000000,{"path":3068,"stem":3069,"title":3070,"date":3048,"chapter":1457,"chapterSort":3071,"docKey":3049,"docRoot":3050,"docTitle":3051,"isWikiDoc":183,"isWikiIndex":3053},"/wiki/2026-02-16-flutter-jiao-cheng/ch2-can-kao-zi-liao","wiki/2026-02-16-Flutter教程/ch2-参考资料","参考资料",2000000,{"path":3073,"stem":3074,"title":3075,"date":3048,"chapter":3076,"chapterSort":3077,"docKey":3049,"docRoot":3050,"docTitle":3051,"isWikiDoc":183,"isWikiIndex":3053},"/wiki/2026-02-16-flutter-jiao-cheng/ch3-huan-jing-pei-zhi","wiki/2026-02-16-Flutter教程/ch3-环境配置","环境配置","3",3000000,{"path":3056,"stem":3058,"title":5,"date":3048,"chapter":3046,"chapterSort":3047,"docKey":3049,"docRoot":3050,"docTitle":3051,"isWikiDoc":183,"isWikiIndex":3053},{"path":3050,"stem":3080,"title":3051,"date":3048,"chapter":3054,"chapterSort":3081,"docKey":3049,"docRoot":3050,"docTitle":3051,"isWikiDoc":183,"isWikiIndex":183},"wiki/2026-02-16-Flutter教程/index",0,1778560327410]