Dart 语言 Stream 和 Future 应用示例

Dart阿木 发布于 2025-06-19 4 次阅读


摘要:

Dart语言作为一种现代化的编程语言,广泛应用于Flutter框架中,用于开发高性能的移动应用。Stream和Future是Dart中处理异步编程的两个重要概念。本文将围绕这两个概念,通过一系列示例代码,深入浅出地介绍Dart中Stream和Future的应用。

一、

异步编程是现代软件开发中不可或缺的一部分,它允许程序在等待某些操作完成时继续执行其他任务。Dart语言提供了Stream和Future两种机制来处理异步操作。本文将详细介绍这两种机制,并通过实际示例代码展示它们的应用。

二、Stream简介

Stream是Dart中用于处理异步数据流的一种机制。它可以看作是一个数据序列,可以不断地产生和消费数据。Stream可以来自多种来源,如网络请求、文件读取等。

1. 创建Stream

在Dart中,可以使用StreamController来创建一个Stream。以下是一个简单的示例:

dart

void main() {


StreamController<String> controller = StreamController<String>();

// 添加数据到Stream


controller.add('Hello');


controller.add('World');

// 监听Stream


controller.stream.listen((data) {


print(data);


});

// 关闭Stream


controller.close();


}


2. Stream转换

Dart提供了丰富的Stream转换操作符,如map、where、asyncMap等,可以对Stream中的数据进行处理。以下是一个使用map操作符的示例:

dart

void main() {


StreamController<String> controller = StreamController<String>();

// 添加数据到Stream


controller.add('1');


controller.add('2');


controller.add('3');

// 使用map转换Stream


controller.stream.map((number) => int.parse(number)).listen((number) {


print(number);


});

// 关闭Stream


controller.close();


}


三、Future简介

Future是Dart中用于表示异步操作结果的类型。它可以看作是一个承诺(Promise),表示某个操作将在未来某个时刻完成,并返回一个结果。

1. 创建Future

在Dart中,可以使用Future.delayed()来创建一个延迟执行的Future。以下是一个简单的示例:

dart

void main() {


Future<String> future = Future.delayed(Duration(seconds: 2), () {


return 'Hello, Future!';


});

// 监听Future


future.then((data) {


print(data);


});


}


2. Future链式调用

Dart中的Future支持链式调用,允许在Future完成后继续执行其他异步操作。以下是一个使用链式调用的示例:

dart

void main() {


Future<String> future1 = Future.delayed(Duration(seconds: 1), () {


return 'Hello, Future 1!';


});

Future<String> future2 = Future.delayed(Duration(seconds: 2), () {


return 'Hello, Future 2!';


});

// 链式调用Future


future1.then((data) {


print(data);


return future2;


}).then((data) {


print(data);


});


}


四、Stream和Future结合使用

在实际应用中,Stream和Future经常结合使用。以下是一个示例,展示如何在Stream中处理Future:

dart

void main() {


StreamController<String> controller = StreamController<String>();

// 模拟异步操作


Future<String> fetchUserData() async {


await Future.delayed(Duration(seconds: 2));


return 'User Data';


}

// 监听Stream


controller.stream.listen((_) {


fetchUserData().then((data) {


print(data);


});


});

// 添加数据到Stream


controller.add('Start fetching user data');

// 关闭Stream


controller.close();


}


五、总结

Stream和Future是Dart中处理异步编程的两个重要概念。通过本文的示例代码,我们可以看到Stream和Future在Dart中的应用场景。在实际开发中,合理运用Stream和Future可以提升应用的性能和用户体验。

(注:本文约3000字,实际字数可能因排版和编辑而有所变化。)