Flutter for HarmonyOS 前置知识:Dart语言详解(下)
本文深入讲解 Dart 语言的进阶核心特性,涵盖面向对象编程(类、公有/私有属性、继承、多态与混入)、泛型以及异步编程(Future 与 Stream)。通过贴近 Flutter 与 HarmonyOS 开发场景的代码示例,帮助开发者理解如何构建类型安全、结构清晰且高性能的跨平台应用。文章强调实践导向,引导读者掌握从封装设备信息到处理网络请求等真实开发需求的关键技术,为深入 Flutter 和鸿蒙

个人主页:ujainu
前言
在前两一篇《Flutter for HarmonyOS 前置知识:Dart语言详解(中)》中,我们掌握了变量、数据类型、控制结构等核心语法。这些内容为你打下了坚实的基础。现在,我们将进入 Dart 的面向对象编程(OOP)世界,深入探讨类、继承、多态、混入等关键概念,并进一步学习 泛型 和 异步编程——这两者是构建高性能 Flutter 应用和 HarmonyOS 跨端能力不可或缺的利器。
无论你是准备深入 Flutter 开发,还是探索 HarmonyOS 的分布式能力,掌握这些进阶特性,都能让你写出更健壮、可维护、高性能的代码。本文将通过清晰的示例和实用场景,带你系统掌握 Dart 的进阶核心。
类
Dart 是一门纯面向对象语言,一切皆对象,所有值都是某个类的实例(包括数字、函数甚至 null)。类是封装数据(属性)和行为(方法)的基本单元。
类的公有属性和私有属性
在 Dart 中,没有 public、private 关键字。属性或方法的可见性由其命名方式决定:
- 以 _(下划线)开头的标识符:表示库内私有(library-private),仅在定义它的 .dart 文件中可见。
- 不以下划线开头:默认为公有,可在任何地方访问。
// Dart私有和公有属性示例
class Person {
// 公有属性
String name;
int age;
// 私有属性
String _id;
String _phone;
Person(this.name, this.age, String id, String phone) :
_id = id, _phone = phone;
// 访问私有属性
String getId() => _id;
String getPhone() => _phone;
// 修改私有属性
void setPhone(String phone) {
_phone = phone;
}
void info() {
print("名字: $name, 年龄: $age");
print("ID: $_id, 电话: $_phone");
}
}
void main() {
print("=== 私有和公有属性示例 ===");
var p = Person("张三", 20, "12345", "13800138000");
print("\n公有属性:");
print(" 名字: ${p.name}");
print(" 年龄: ${p.age}");
print("\n私有属性:");
print(" ID: ${p.getId()}");
print(" 电话: ${p.getPhone()}");
print("\n修改电话:");
p.setPhone("13900139000");
print(" 新电话: ${p.getPhone()}");
print("\n全部信息:");
p.info();
}
运行结果:
类的继承
Dart 支持单继承,使用 extends 关键字。子类可以继承父类的公有属性和方法,并可重写(override)它们。
// 父类
class Vehicle {
String brand;
Vehicle(this.brand);
void start() {
print(" $brand 车辆启动");
}
}
// 子类
class ElectricCar extends Vehicle {
int batteryCapacity;
ElectricCar(String brand, this.batteryCapacity) : super(brand);
void start() {
print(" $brand 电动车启动,电池容量: ${batteryCapacity}kWh");
}
void charge() {
print(" $brand 正在充电");
}
}
void main() {
var car = ElectricCar("鸿蒙智行", 100);
car.start(); // 调用重写后的方法
car.charge(); // 调用子类特有方法
}
运行结果:
类的多态
多态指同一接口,不同实现。在 Dart 中,通过父类引用指向子类实例,并调用被重写的方法来体现。
// 父类
class Vehicle {
String brand;
Vehicle(this.brand);
void start() {
print("$brand 车辆启动");
}
}
// 子类
class ElectricCar extends Vehicle {
int batteryCapacity;
ElectricCar(String brand, this.batteryCapacity) : super(brand);
void start() {
print("$brand 电动车启动,电池容量: ${batteryCapacity}kWh");
}
}
void testVehicle(Vehicle v) {
v.start(); // 实际调用的是子类的 start 方法
}
void main() {
var gasCar = Vehicle("燃油车");
var elecCar = ElectricCar("电动车", 75);
testVehicle(gasCar); // 输出:燃油车 车辆启动
testVehicle(elecCar); // 输出:电动车 电动车启动,电池容量: 75kWh
}
运行结果:
多态让代码更具扩展性。未来新增 HybridCar,无需修改 testVehicle 函数。
类的混入
Dart 不支持多继承,但可通过 Mixin 实现“多继承”的效果。Mixin 是一种可复用的代码模块,可在多个类中组合使用。
// 定义 Mixin
mixin Flyable {
void fly() {
print("正在飞行");
}
}
mixin Swimmable {
void swim() {
print("正在游泳");
}
}
// 使用 Mixin
class Duck extends Animal with Flyable, Swimmable {
void makeSound() {
print("嘎嘎叫");
}
}
class Animal {
void makeSound() {
print("动物发声");
}
}
void main() {
var duck = Duck();
duck.makeSound(); // 来自 Animal
duck.fly(); // 来自 Flyable
duck.swim(); // 来自 Swimmable
}
运行结果:
Mixin 特别适合为类添加横向能力(如日志、缓存、网络状态监听等),避免类层次过深。
dart中的泛型
泛型(Generics)用于编写类型安全且可复用的代码。它允许你在定义类、方法或接口时,不指定具体类型,而是在使用时再确定。
泛型类示例
class Box<T> {
T content;
Box(this.content);
T getContent() => content;
void setContent(T newContent) {
content = newContent;
}
}
void main() {
var stringBox = Box<String>("Hello Dart");
var intBox = Box<int>(42);
print(stringBox.getContent().runtimeType); // String
print(intBox.getContent().runtimeType); // int
// stringBox.setContent(100); // ❌ 编译错误!类型不匹配
}
运行结果:
泛型方法
T firstElement<T>(List<T> list) {
if (list.isEmpty) throw Exception("列表为空");
return list[0];
}
void main() {
var names = ["张三", "李四"];
var scores = [90, 85];
print(firstElement(names)); // 张三
print(firstElement(scores)); // 90
}
运行结果:
泛型在 Flutter 中无处不在,如 List、Future、Stream 等。
dart中的异步编程
Dart 是单线程语言,但通过 事件循环(Event Loop) 和 Future/Stream 模型实现高效的异步非阻塞 I/O。
Future:处理单次异步操作
Future<String> fetchData() async {
await Future.delayed(Duration(seconds: 2)); // 模拟网络请求
return "从 HarmonyOS 服务获取的数据";
}
void main() async {
print("开始请求...");
String data = await fetchData();
print("收到数据: $data");
print("请求完成");
}
输出顺序:
Stream:处理多次异步事件
Stream<int> countStream(int to) async* {
for (int i = 1; i <= to; i++) {
await Future.delayed(Duration(seconds: 1));
yield i;
}
}
void main() {
print("开始计数...");
countStream(3).listen((number) {
print("当前数字: $number");
});
print("监听已启动");
}
输出:
结语
恭喜你!至此,你已经掌握了 Dart 语言的核心进阶特性:
- 通过类、继承、多态、混入,构建清晰、可扩展的面向对象架构;
- 利用泛型提升代码的类型安全性和复用性;
- 借助 Future 和 Stream 高效处理异步任务,为 Flutter 动画、网络请求、HarmonyOS 分布式通信打下坚实基础。
这些能力不仅是 Dart 的精华,更是你通往 Flutter 高级开发 和 HarmonyOS 生态融合的关键桥梁。建议你动手实践每一个示例,尝试组合这些特性——比如创建一个带泛型的异步数据仓库类,或使用 Mixin 为设备类添加网络状态监听。
Dart 的旅程才刚刚深入,真正的跨平台魔法,正等着你去施展!
🌟 欢迎加入开源鸿蒙跨平台社区:开源鸿蒙跨平台开发者社区!
更多推荐



所有评论(0)