本章是 Dart 学习的起点涵盖变量、数据类型、运算符、控制流程、集合操作和函数等核心基础。每个知识点都配有完整的代码示例和解析适合零基础入门。1.1 Hello World 与环境搭建知识点Dart SDK 安装与环境配置main()函数是程序的入口使用print()输出内容在线运行环境DartPadhttps://dartpad.dev代码示例// 这是 Dart 的入口函数voidmain(){print(Hello, Dart!);// 控制台输出}解析void main()是必须的程序从这里开始执行。print()函数用于向控制台输出字符串。每行语句以分号;结尾。运行方式本地dart hello.dart在线复制到 DartPad 点击 Run1.2 变量与数据类型知识点Dart 是强类型语言但支持类型推断。常用数据类型int整数64位double浮点数64位String字符串UTF-16bool布尔值true/falseList列表数组Map键值对集合Set无序不重复集合变量声明方式var自动推断类型dynamic动态类型可在运行时改变Object所有类的基类类型安全代码示例voidmain(){// 整数int age25;// 浮点数double price19.99;// 字符串StringnameAlice;// 布尔bool isStudenttrue;// 使用 var 推断类型varcityBeijing;// 推断为 Stringvarscore98.5;// 推断为 double// dynamic 可以改变类型dynamicvariableHello;print(variable);// Hellovariable123;print(variable);// 123// List 列表Listintnumbers[1,2,3];varfruits[apple,banana];// 推断为 ListString// Map 映射MapString,intscores{Math:90,English:85};varperson{name:Bob,age:30};// 推断为 MapString, Object// Set 集合SetStringcolors{red,green,blue};}解析int和double是num的子类型支持算术运算。字符串可以用单引号或双引号包裹。列表List索引从 0 开始支持add()、remove()等方法。映射Map中的键必须是唯一的。1.3 常量知识点final运行时常量只能赋值一次。const编译时常量在编译时确定值。代码示例voidmain(){finalStringnameAlice;// name Bob; // 错误final 变量不能再赋值constdouble pi3.14159;// pi 3.14; // 错误const 变量不可修改// const 赋值必须使用编译时常量constint max100;finalDateTimenowDateTime.now();// final 可以接受运行时的值// const DateTime now2 DateTime.now(); // 错误DateTime.now() 不是编译时常量// 常量列表finalListintfinalList[1,2,3];finalList.add(4);// 可以修改内容因为 final 只限制引用不可变// finalList [4, 5, 6]; // 错误不能重新赋值constListintconstList[1,2,3];// constList.add(4); // 错误const 列表完全不可变}解析final适用于启动后不会再变化的变量如用户ID。const适用于固定不变的值如圆周率、最大重试次数。const还可以用在创建常量对象上例如const Text(Hello)Flutter 中可减少重建开销。1.4 运算符知识点算术运算符-*/%~/整除关系运算符!逻辑运算符||!赋值运算符-*/%~/空值相关??空值合并?.安全调用??空值赋值级联运算符..和?..允许连续调用对象的方法或属性代码示例voidmain(){// 算术int a10,b3;print(ab);// 13print(a~/b);// 整除3print(a%b);// 余数1// 关系print(ab);// true// 逻辑bool isAdulttrue;bool hasTicketfalse;print(isAdulthasTicket);// falseprint(isAdult||hasTicket);// true// 赋值复合int c5;c2;// c c 2print(c);// 7// 空值合并String?name;StringdisplayNamename??Guest;print(displayName);// Guest// 安全调用String?uppername?.toUpperCase();print(upper);// null// 空值赋值String?nickname;nickname??User;print(nickname);// User// 级联运算符varlist[1,2];list..add(3)..add(4)..remove(2);print(list);// [1, 3, 4]}解析~/是整数除法结果向下取整。??左侧为null时返回右侧的值。?.调用前先判断是否null若为null则整个表达式为null不会执行方法。..允许对同一个对象进行多次操作避免重复写变量名。1.5 字符串操作知识点字符串插值${expression}简单的变量可省略大括号。多行字符串三个单引号或双引号。原始字符串前缀r不转义。常用方法length、toUpperCase()、toLowerCase()、trim()、split()、contains()、replaceAll()等。代码示例voidmain(){StringnameDart;int version3;// 字符串插值print(Hello,$name! Version$version);// Hello, Dart! Version 3print(Sum:${23});// Sum: 5// 多行字符串Stringmultiline This is line 1 This is line 2 ;print(multiline);// 原始字符串不转义StringrawrNewline: \n will not be escaped;print(raw);// 输出: Newline: \n will not be escaped// 字符串方法Stringgreeting Hello World! ;print(greeting.trim());// Hello World!print(greeting.toUpperCase());// HELLO WORLD! print(greeting.contains(World));// trueListStringpartsapple,banana,orange.split(,);print(parts);// [apple, banana, orange]print(greeting.replaceAll(World,Dart));// Hello Dart! }解析插值中复杂表达式必须使用${}。多行字符串保留换行符和缩进。原始字符串r...常用于正则表达式或文件路径。1.6 控制流程知识点if / else条件分支for循环标准、for-inwhile/do-while循环switch / case支持字符串、数值等需要breakbreak和continue代码示例voidmain(){// if-elseint score85;if(score90){print(优秀);}elseif(score60){print(及格);}else{print(不及格);}// for 循环for(int i0;i5;i){print(i);}// for-in 遍历列表varfruits[苹果,香蕉,橙子];for(varfruitinfruits){print(fruit);}// whileint i0;while(i3){print(i);i;}// do-while 至少执行一次int j0;do{print(j);j;}while(j3);// switchStringgradeB;switch(grade){caseA:print(优秀);break;caseB:print(良好);break;default:print(未知);}}解析switch必须包含break或continue以避免穿透。for-in适合遍历集合无需索引。do-while常用于至少需要执行一次的场景如输入验证。1.7 集合操作知识点List有序可重复。常用方法add、remove、insert、indexOf、sort、forEach、map、where、reduce、fold。Set无序不可重复。常用方法add、remove、contains、union、intersection。Map键值对。常用方法keys、values、containsKey、forEach、map。集合推导式结合if、for生成集合。代码示例voidmain(){// List 操作Listintnumbers[1,2,3];numbers.add(4);numbers.remove(2);print(numbers);// [1, 3, 4]numbers.sort();numbers.forEach((n)print(n));// 高阶函数vardoublednumbers.map((n)n*2).toList();print(doubled);// [2, 6, 8]varevensnumbers.where((n)n%20).toList();print(evens);// [4]// reduce 求和int sumnumbers.reduce((a,b)ab);print(sum);// 8// fold 带初始值int productnumbers.fold(1,(a,b)a*b);print(product);// 12// Set 操作SetintsetA{1,2,3};SetintsetB{3,4,5};print(setA.union(setB));// {1,2,3,4,5}print(setA.intersection(setB));// {3}// Map 操作MapString,intscores{Math:90,English:85};scores[Science]95;scores.forEach((subject,score)print($subject:$score));print(scores.keys);// (Math, English, Science)}解析map、where返回的是惰性集合需要.toList()转成 List。reduce要求集合非空fold可提供初始值为空时返回初始值。Set 的union和intersection返回新 Set。1.8 函数知识点函数定义返回值类型、函数名、参数列表、函数体。可选参数位置可选参数[]、命名可选参数{}。默认参数值在可选参数中指定。匿名函数Lambda。箭头函数仅适用于单表达式函数体。代码示例voidmain(){// 普通函数print(add(3,5));// 8// 位置可选参数print(greet(Alice,Mr));// Hello Mr Aliceprint(greet(Bob));// Hello Bob// 命名可选参数print(createUser(Alice,age:25,country:USA));print(createUser(Bob,age:30));// country 使用默认值// 匿名函数作为参数Listintlist[1,2,3];list.forEach((item)print(item));// 或使用箭头函数list.forEach(print);// 函数作为变量Functionmultiply(int a,int b)a*b;print(multiply(4,5));// 20}// 普通函数intadd(int a,int b){returnab;}// 位置可选参数中括号内为可选可设默认值Stringgreet(Stringname,[Stringtitle]){if(title.isEmpty)returnHello$name;returnHello$title$name;}// 命名可选参数大括号内调用时需指定参数名StringcreateUser(Stringname,{int age18,StringcountryChina}){returnname:$name, age:$age, country:$country;}解析位置可选参数按顺序传递可以设置默认值。命名可选参数调用时使用paramName: value顺序无关更推荐用于参数较多的函数。匿名函数常用作回调如list.forEach((item) { ... })。箭头函数只能包含一个表达式不能有花括号和分号。总结第一章涵盖了 Dart 基础语法的 8 个核心部分每个知识点都提供了可直接运行的代码示例和详细解析。掌握这些内容后你已经能够编写简单的 Dart 程序为学习 Flutter 打下坚实基础。下一章将进入面向对象编程类、继承、混入等。