`
iaiai
  • 浏览: 2144572 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

flutter Future的正确用法

阅读更多
在flutter中经常会用到异步任务,dart中异步任务异步处理是用Future来处理,那么如何实现用Future来处理一个异步操作呢,网上的Future教程、原理都是说说原理,但是没有什么干货,没有教你如何去用。今天看了下源码,终于知道如何去使用Future了。其实和javaScript的promise很像,但是promise的参数函数的参数提供了resolve,reject方法去操控状态,
那么Future难道就没有吗?原来dart:async提供了Completer类,通过实例这个类生成Future,同时在用这个实例去控制生成的future的成功或者失败的状态。代码如下:
Future openImagePicker () {
    Complete completer = new Completer();
   
    // ImagePicker 是一个图片选择插件
    ImagePicker.singlePicker(
       context, 
       singleCallback: (data) {
         completer.complete(data);
       },
       failCallback:(err) {
         completer.catchError(err); 
       }
    );
     
    return completer.future;
}

// 使用
openImagePicker().then((data) {}).catchError((err){});

返回completer生成的future,通过completer.complete方法去控制completer.future的成功状态,通过completer.catchError去控制completer.future的失败状态。
completer.complete和completer.catchError方法的参数就是future的返回值。

completer.complete就相当于promise的resolve,completer.catchError相当于promise中的reject()

通过Completer可以得心应手的控制Future的状态。
分享到:
评论

相关推荐

    【Flutter】Future 与 FutureBuilder 异步编程代码示例.zip

    【Flutter】Future 与 FutureBuilder 异步编程代码示例 ( FutureBuilder 构造函数设置 | 处理 Flutter 中文乱码 | 完整代码示例 ) https://hanshuliang.blog.csdn.net/article/details/119924412 博客源码快照

    flutter file-selector

    在实现多选时,需要使用到Flutter的Future和async/await等技术,确保异步操作的正确处理; 在获取文件信息时,需要使用到Flutter的Intent和ActivityResult等类,以便正确处理Android系统中的Intent和返回结果。 总之...

    【Flutter】Dart 面向对象 ( get 方法 set 方法 静态方法 ).zip

    【Flutter】Dart 面向对象 ( get 方法 | set 方法 | 静态方法 ) https://hanshuliang.blog.csdn.net/article/details/113883540 博客源码快照

    Flutter 官方开发文档PDF

    这是一个整理自Flutter官方的开发...在全世界,Flutter正在被越来越多的开发者和组织使用,并且Flutter是完全免费、开源的。 主要内容: 开始使用 Flutter 开发文档 测试和调试 性能优化 打包部署 资源列表 参考资料

    Flutter下载更新App的方法示例

    主要介绍了Flutter下载更新App的方法示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

    flutter SingleChildScrollView的使用

    import 'package:flutter/material.dart'; class Demo1 extends StatelessWidget{ @override Widget build(BuildContext context) { // TODO: implement build return Scaffold( appBar: AppBar( elevation: ...

    解决Flutter启动页白屏问题,flutter启动显示图片

    启动页是App必不可少的一部分,然而在一个新创建的Flutter项目中,运行发现是没有启动页的。...之所以新建的项目是白屏,因为flutter对此的方法默认是注释掉的 1)源代码下载,请放心下载 2)使用在多个项目中

    《Flutter API 中文文档》精心整理,可快速查阅相关控件的属性,用法

    Flutter详细的控件属性说明,用法

    给领导看的Flutter评估文档,如何说服领导用Flutter,Flutter优缺点、Flutter原理、Flutter框架结构等等

    整理了,Flutter优缺点、Flutter原理、Flutter框架结构等等内容,内容来自于各个大神的博客,本人只是个搬运工。

    Flutter CustomPainter实现半圆形饼图

    flutter绘制自定义组件,flutter绘制自定义组件,flutter绘制自定义组件flutter绘制自定义组件

    【Flutter】Flutter 照片墙

    【Flutter】Flutter 照片墙 ( Center 组件 | Wrap 组件 | ClipRRect 组件 | Stack 组件 | Positioned 组件 | 按钮组合组件 ) https://hanshuliang.blog.csdn.net/article/details/114821837 博客源码快照

    Flutter实战.pdf

    离线版本Flutter实战,github开源版本,感谢开源。学习Flutter必备资料。混合APP开发

    Flutter AppBar 工具栏、导航栏

    Flutter AppBar组件是应用的工具栏,是由多个组件组成。下面详细介绍appBar使用方法、TabBar使用方法、去掉头部的appBar、仿美团发现AppBar(可滚动TabBar)

    android studio Flutter Plugin~flutter 插件

    android studio Flutter Plugin~flutter 插件 android studio开发flutter 必须插件

    flutter_webrtc_rtsp

    flutter_webrtc_rtsp 拉流播放 demo

    flutter之ppt.rar

    第一个完成flutter的高校本科课程用ppt,共分12章,简要的介绍了flutter的课程:flutter的安装、dart语言的应用、常用组件、Material Design、Cupertino、页面布局、资源与图片、路由与导航、组件装饰和动画等内容

    Flutter 底层进阶篇.pdf

    所以接下来主要讲 Flutter 底层的实现,例如架构等,虽然我们更关 心如何用 Flutter 写 APP,但是理解 Flutter 的架构,可以让我们在 较高层面理解 Flutter 的工作方式和原理,从而知道 Flutter 可以实 现哪些功能及...

    flutter 微信语音消息动画

    微信语音播放动画,通过flutter的动画和差值器来实现。如有类似需求可以直接使用。

    电商购物平台Flutter双端APP源码Flutter App

    电商购物平台Flutter双端APP源码,是电商CMS购物系统的配套APP,可以编译生成Android和iOS端APP。 - 固定产品价格的数字格式 - Firebase白屏修复 - 购物车摘要问题已修复 - 推特登录 - 应用默认语言 - 通过离线支付...

    io.flutter.zip

    Android Studio上运行Flutter,报错could not find io.flutter:flutter_embedding_debug的错误,需要替换以上zip文件即可,Android Studio 4.2.0, Flutter 2.2.3, Dart 2.13.4

Global site tag (gtag.js) - Google Analytics