当前位置: 首页 > news >正文

Flutter开发 dart异步

Future

Future表示在将来某时获取一个值的方式。当一个返回Future的方法被调用时,该方法会把要执行的某事件放入队列,并返回一个未完成的Future对象,该事件执行完毕后,Future对象的状态会自动变成已经完成,此时可以通过then链式调用或async和awit获取该事件的返回值。
(1)异步读文件
在这里插入图片描述
在pubspec.yaml中添加文件

flutter:assets:- temp/test.txt

test.txt

hello word

代码

import 'dart:io';//不要使用main.dart
void main() {String fileName = "temp/test.txt";//callbak:成功执行//onError:失败readFile(fileName).then((value) {print(value);},onError: (e){print("读取文件异常");});
}//readAsString异步读取文件
Future<String> readFile(String filename) {File file = File(filename);return file.readAsString();
}输出:
hello word

(2)同步读文件

void main() {String s = readFileSync(fileName);print(s);
}String readFileSync(String filename){File file =  File(filename);String info = file.readAsStringSync();return info;
}

async和await

让异步任务的执行看起来跟同步代码的执行顺序一致。

void main() {String fileName = "temp/test.txt";print("start");readFile(fileName).then((value) {print(value);},onError: (e){print("读取文件异常");});print("end");
}Future<String> readFile(String filename) {File file = File(filename);return file.readAsString();
}输出start
end
hello word

使用await后

void main() async {String fileName = "temp/test.txt";print("start");String info = await readFile(fileName);print(info);print("end");
}Future<String> readFile(String filename) {File file = File(filename);return file.readAsString();
}start
hello word
end

async的作用就是标记一个方法是异步方法,await的作用是等待异步任务的结果。

  1. await只能在标记了async的一部方法中使用
  2. 当使用async作为方法名后缀声明时,说明这个方法的返回值是一个Future类型。
  3. 当执行到该方法中用await标注的代码时,会暂停该方法其他部分的代码执行。
  4. 当await标注的代码引用的Future类型返回值执行完成,awit标注的代码后的下一行代码会立即执行。

Stream

Future表示一次异步获得的数据。Stream实现异步事件流的处理,它表示多次异步获得的数据。
Stream方式读取文件内容时,一般情况下每次可以读取一部分数据,并进行相应的处理。

void main()  {String fileName = "temp/test.txt";Stream stream = getContent(fileName);stream.listen((event) {//获取数据print(event);},onError: (e){//错误},onDone: (){//完成});
}Stream getContent(String fileName){File file = File(fileName);return file.openRead();
}输出
[104, 101, 108, 108, 111, 32, 119, 111, 114, 100]
http://www.xdnf.cn/news/1237141.html

相关文章:

  • 动态置信度调优实战:YOLOv11多目标追踪精度跃迁方案(附完整代码)
  • 基于springboot的在线考试系统/考试信息管理平台
  • 生成式人工智能展望报告-欧盟-04-社会影响与挑战
  • trace-cmd记录线程被中断打断的时间
  • Java 实现poi方式读取word文件内容
  • 编译旧版本的electron内核
  • VisualStudio的一些开发经验
  • 能表示旋转的矩阵是一个流形吗?
  • C++与Go的匿名函数编程区别对比
  • 吴恩达【prompt提示词工程】学习笔记
  • 曼哈顿距离与切比雪夫距离
  • 北京-4年功能测试2年空窗-报培训班学测开-第六十六天
  • Digit Queries
  • Arrays.asList() add方法报错java.lang.UnsupportedOperationException
  • 常见的深度学习模块/操作中的维度约定(系统性总结)
  • 接口测试用例的编写
  • Java 大视界 -- Java 大数据机器学习模型在金融市场情绪分析与投资决策辅助中的应用(379)
  • WSUS服务器数据库维护与性能优化技术白皮书
  • Nvidia Orin + RealSense D435i 与3D地图实现导航
  • ulimit参数使用详细总结
  • 第九章:了解特殊场景下的redis
  • 推荐系统学习笔记(八)其他召回通道
  • 机器人抓取流程介绍与实现——机器人抓取系统基础系列(七)
  • 《人形机器人的觉醒:技术革命与碳基未来》——类人关节设计:人工肌肉研发进展及一款超生物肌肉Hypermusclet的设计与制造
  • 最小半径覆盖问题【C++解法+二分+扫描线】
  • 从零开始学Express,理解服务器,路由于中间件
  • 批发订货系统:私有化部署与源代码支持越来越受市场追捧
  • 【硬件-笔试面试题】硬件/电子工程师,笔试面试题-56,(知识点:电源模块,DCDC电源,LDO电源,原理及其特点)
  • CVE-2025-5947 漏洞场景剖析
  • SpringBoot3.x入门到精通系列:2.5 整合 MyBatis 详解