news 2026/4/23 18:46:55

Flutter for HarmonyOS 前置知识:Dart语言详解(中)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Flutter for HarmonyOS 前置知识:Dart语言详解(中)


作者:个人主页:ujainu

前言

🚀 Dart 基础语法详解:函数、类与构造函数全面解析

本文带你系统掌握 Dart 中的核心语法 —— 函数定义、参数类型、匿名函数、箭头函数以及类和构造函数的使用方法。适合 Flutter 开发初学者快速上手!

Dart中的函数定义

在 Dart 中,函数是程序的基本构建块之一。一个完整的函数通常包括:返回类型、函数名、参数列表和函数体。

✅返回值

  • 有返回值:具体类型 函数名称(){}
StringgetName(){return"Dart";}
  • 无返回值:void 函数名称(){}
voidprintHello(){print("Hello Dart!");}
  • 注意:返回值类型可以省略,Dart会知道推断类型为dynamic
// 不推荐:类型不明确getAge()=>25;

实例:

函数中的必传参数和可选位置参数

✅必传参数

  • 特点:必传参数不能为空,必须按顺序传递。
voidintroduce(Stringname,int age){print("我叫$name,今年$age岁");}
  • 调用时必须传入所有参数:
introduce("张三",20);// ✅ 正确// introduce("李四"); ❌ 错误:缺少参数

实例代码:

✅可选位置参数

  • 特点:用方括号 [] 包裹,表示该参数可选,且必须放在必传参数之后。
voidintroduce(Stringname,[int?age,String?city]){print("我叫$name${age!=null?',$age岁':''}${city!=null?',来自$city':''}");}
  • 语法:函数名(String a,[String?b,…]),传递时安照顺序传递。
introduce("张三");// 输出:我叫张三introduce("李四",25);// 输出:我叫李四,25岁introduce("王五",30,"北京");// 输出:我叫王五,30岁,来自北京

实例代码:

✅可选命名参数

  • 特点:使用花括号 {} 定义,调用时通过 参数名: 值 的形式传参,无需关心顺序。
voidintroduce(Stringname,{int?age,String?city}){print("我叫$name${age!=null?',$age岁':''}${city!=null?',来自$city':''}");}
  • 调用方式(自由指定参数):
introduce("张三");introduce("李四",age:25);introduce("王五",city:"上海",age:30);// 参数顺序无关

✅ 优势:代码更具可读性,尤其适用于参数较多的情况。
实例代码:

匿名函数和箭头函数

✅匿名函数(Anonymous Function)

  • 特点:声明一个没有名称的函数赋值给变量,进行调用。
  • 语法:Function变量名 = (){};
  • 注意:函数的类型使用Function来声明。
    没有函数名的函数,常用于回调或赋值给变量。
varsayHi=(){print("Hello,这是一个匿名函数!");};// 调用sayHi();

也可以带参数:

vargreet=(Stringname){print("你好,$name!");};greet("Dart");

实例:

✅箭头函数(Arrow Function)

  • 特点:函数体只有一行代码,可以用箭头函数。
  • 语法:函数名()=> 代码逻辑
  • 注意:使用箭头函数可以省略关键字。
// 普通函数voidprintName(){print("张三");}// 箭头函数简化版voidprintName()=>print("张三");// 带参数的箭头函数varmultiply=(int a,int b)=>a*b;print(multiply(3,4));// 输出:12

实例:

Dart 中的类(Class)

class

  • 定义:包含属性和方法来定义对象的行为和状态。
  • 需求:定义一个Person类,包含姓名、年龄、性别,包括学习方法。
  • 语法:class Person{属性,方法}
  • 实例化对象:Person 变量 = Person(); 属性和方法:变量.属性/方法()

✅ 示例:定义一个 Person 类

// 简单的Dart类样例classPerson{// 属性(成员变量)Stringname;int age;String?address;// 可选属性,使用?表示可为null// 构造函数Person(this.name,this.age,{this.address});// 方法(成员函数)voidsayHello(){print("你好,我叫$name,今年$age岁。");if(address!=null){print("我来自$address。");}}// getter方法Stringgetinfo=>"$name-$age岁";// setter方法setupdateAge(int newAge){if(newAge>0){age=newAge;}}// 静态方法staticvoidprintDefaultMessage(){print("这是Person类的静态方法。");}}

✅ 使用类创建对象并调用成员

voidmain(){// 创建Person对象finalperson1=Person("张三",20,address:"北京");finalperson2=Person("李四",25);// 调用实例方法person1.sayHello();person2.sayHello();// 使用getterprint("\nperson1的信息:${person1.info}");print("person2的信息:${person2.info}");// 使用setterperson1.updateAge=21;print("\n更新后person1的年龄:${person1.age}");// 调用静态方法Person.printDefaultMessage();}

结果

dart类中的默认和命名构造函数

✅ 1. 默认构造函数(Default Constructor)

  • Dart 会自动生成无参构造函数(如果未定义其他构造函数),但我们通常手动定义带参数的构造函数。
Person(this.name,this.age,{this.address});

等价于:

Person(Stringname,int age,{String?address}):name=name,age=age,address=address;

✅ 2. 命名构造函数(Named Constructor)
允许为同一个类定义多个不同用途的构造函数,语法为 ClassName.identifier。

示例:fromJson 和 defaultPerson

// 从 JSON 创建对象Person.fromJson(Map<String,dynamic>json):name=json['name'],age=json['age'],address=json['address'];// 创建默认用户Person.defaultPerson():name="未知",age=18,address="未知地址";

默认和命名构造函数对比示例:

// Dart类构造函数样例classPerson{// 属性(成员变量)Stringname;int age;String?address;// 可选属性,使用?表示可为null// 1. 默认构造函数// 语法:类名(参数列表)Person(this.name,this.age,{this.address});// 2. 命名构造函数:从JSON创建对象// 语法:类名.构造函数名(参数列表) : 初始化列表Person.fromJson(Map<String,dynamic>json):name=json['name'],age=json['age'],address=json['address'];// 3. 命名构造函数:创建默认对象Person.defaultPerson():name="未知",age=18,address="未知地址";// 方法(成员函数)voidsayHello(){print("你好,我叫$name,今年$age岁。");if(address!=null){print("我来自$address。");}}// getter方法Stringgetinfo=>"$name-$age岁";// setter方法setupdateAge(int newAge){if(newAge>0){age=newAge;}}// 静态方法staticvoidprintDefaultMessage(){print("这是Person类的静态方法。");}}voidmain(){print("=== Dart类构造函数示例 ===\n");// 1. 使用默认构造函数print("1. 使用默认构造函数:");finalperson1=Person("张三",20,address:"北京");finalperson2=Person("李四",25);person1.sayHello();person2.sayHello();// 2. 使用命名构造函数:fromJsonprint("\n2. 使用命名构造函数fromJson:");finalpersonJson={'name':'王五','age':28,'address':'上海'};finalperson3=Person.fromJson(personJson);person3.sayHello();// 3. 使用命名构造函数:defaultPersonprint("\n3. 使用命名构造函数defaultPerson:");finalperson4=Person.defaultPerson();person4.sayHello();// 使用getterprint("\n4. 使用getter获取信息:");print("person1的信息:${person1.info}");print("person2的信息:${person2.info}");// 使用setterprint("\n5. 使用setter更新年龄:");person1.updateAge=21;print("更新后person1的年龄:${person1.age}");// 调用静态方法print("\n6. 调用静态方法:");Person.printDefaultMessage();}

运行结果:

📌 结语

Dart 作为 Flutter 的开发语言,其语法简洁而强大。掌握好 函数定义、参数机制、类与构造函数 是迈向 Flutter 高效开发的第一步。

👉 后续我们将深入讲解:继承、混入(mixin)、泛型、异步编程(Future/Stream) 等高级内容,敬请关注!

欢迎加入开源鸿蒙跨平台社区:开源鸿蒙跨平台开发者社区!

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/23 11:33:54

IndexTTS-2零样本音色克隆实战:Sambert镜像快速上手指南

IndexTTS-2零样本音色克隆实战&#xff1a;Sambert镜像快速上手指南 1. 开箱即用的中文语音合成体验 你有没有试过&#xff0c;只用几秒钟的录音&#xff0c;就能让AI模仿出一模一样的声音&#xff1f;不是简单变声&#xff0c;而是连语气、停顿、呼吸感都高度还原——这不再…

作者头像 李华
网站建设 2026/4/22 20:34:47

别等近视才后悔!孩子眼睛早发的“警报“,家长却总当成小毛病

‍  如今儿童青少年近视率居高不下的话题&#xff0c;频繁出现在大众视野中&#xff0c;越来越多的家长开始关注孩子的视力健康&#xff0c;但仍有不少人对孩子眼睛发出的早期信号不以为意&#xff0c;总觉得那些都是无关紧要的小毛病&#xff0c;等到孩子真的戴上眼镜&#…

作者头像 李华
网站建设 2026/4/23 13:17:45

Open-AutoGLM输入法设置坑点,很多人没注意

Open-AutoGLM输入法设置坑点&#xff0c;很多人没注意 你是不是也遇到过这种情况&#xff1a;明明ADB连上了&#xff0c;权限都开了&#xff0c;代码跑起来也没报错&#xff0c;结果AI代理一执行操作就卡住&#xff0c;提示“屏幕被标记为敏感屏幕”&#xff1f;或者输入文字时…

作者头像 李华
网站建设 2026/4/23 12:56:37

小白必看!Live Avatar数字人模型一键启动实操分享

小白必看&#xff01;Live Avatar数字人模型一键启动实操分享 你是不是也刷到过那种“会说话的数字人”视频&#xff1f;看起来像是真人直播&#xff0c;其实背后是AI在驱动。最近阿里联合高校开源了一个叫 Live Avatar 的数字人模型&#xff0c;能通过一张图一段音频&#xf…

作者头像 李华
网站建设 2026/4/23 11:38:58

Python 3.10+环境已就绪,PyTorch镜像助力现代AI开发

Python 3.10环境已就绪&#xff0c;PyTorch镜像助力现代AI开发 在深度学习项目中&#xff0c;搭建一个稳定、高效且开箱即用的开发环境往往是第一步&#xff0c;也是最耗时的一步。依赖冲突、CUDA版本不匹配、包缺失等问题常常让开发者陷入“配置地狱”。为了解决这一痛点&…

作者头像 李华