`
iaiai
  • 浏览: 2203281 次
  • 性别: 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_gallery源代码

    项目说明文件,通常包含项目简介、安装指南、使用方法等信息。在 Flutter Gallery 中,它可能解释了如何运行应用以及展示的特性。 7. **.packages**: 这个文件是 Dart 包的自动索引,它包含了项目中所有导入的包...

    flutter_app.rar

    Flutter是一款由Google开发的开源...在flutter_app中,我们可以学习如何正确引用和使用这些资源。 以上就是“flutter_app.rar”中涉及的主要知识点,通过学习和实践,新手可以快速掌握Flutter的基本用法和开发流程。

    flutter图片选择器

    下面将详细介绍`image_picker`库的使用方法及其核心知识点。 1. **安装**: 在`pubspec.yaml`文件中添加`image_picker`依赖,然后执行`flutter pub get`来安装。 2. **导入库**: 在需要使用图片选择器的dart...

    使用Flutter开发的常见的App启动页

    - 在`build`方法中,使用`Container`、`Image`等组件来布局和展示启动页的图像或其他设计元素。 - 设置一个合适的背景颜色,可以使用`Color`对象或者自定义颜色渐变`LinearGradient`。 - 添加延迟时间,例如使用`...

    flutter 仿豆瓣点评

    【Flutter 仿豆瓣点评】项目是一个使用Flutter框架开发的移动端应用示例,旨在模仿豆瓣电影的用户点评功能,为开发者提供一个学习和实践Flutter技术的平台。Flutter是Google推出的一款用于构建高性能、高保真、跨...

    Flutter版本的Gank客户端.zip

    在Flutter中,可以使用Future和async/await关键字来处理这些操作。 9. **自定义Painter**:为了实现特定的视觉效果,开发者可能需要自定义Painter,这涉及到Canvas和绘图API的使用。 10. **测试**:为了确保代码的...

    flutter_local_notifications..zip

    本文将详细介绍该插件的使用方法和关键知识点。 一、`flutter_local_notifications`简介 `flutter_local_notifications`是由Zelezny开发并维护的开源项目,它为Flutter提供了在Android和iOS设备上显示本地通知的...

    一个FlutterUI挑战建立一个行星应用程序

    在JavaScript中,我们常使用Promise或async/await处理异步操作,而在Flutter中,我们使用Future和Stream。虽然两者在概念上有相似之处,但具体语法和用法有所不同。 在文件名`flutter_ui_challenge_planets_app-...

    Flutter图片选择器.zip

    这个方法会返回一个Future,其结果是一个List,包含了用户选择的所有图片。这些Asset对象提供了访问图片元数据(如路径、宽度、高度)以及加载图片到内存或磁盘的方法。为了展示所选图片,你可以利用Flutter的...

    Flutter错误捕捉和处理插件

    Flutter提供了内置的错误处理机制,但为了更有效地管理和记录错误,开发者通常会使用专门的错误捕捉插件。本文将详细讨论Flutter中的错误处理以及“Flutter错误捕捉和处理插件”的应用。 首先,让我们了解一下...

    Flutter入门与实战:日期选择器

    Flutter还支持日期选择器的国际化,可以根据用户的设备设置自动显示正确的日期格式。不过,如果你想手动控制日期格式,可以使用`intl`库。 ```dart import 'package:intl/intl.dart'; String formattedDate = ...

    Flutter 基于 dio 和 http 两种网络库的基础封装

    在 Flutter 开发中,网络请求是必不可少的一部分,用于获取服务器数据、实现动态功能等。本教程将深入探讨如何基于 dio 和 http 这两种流行的网络库进行基础封装,以提高代码复用性和项目效率。 dio 是一个强大的 ...

    audioplayers,同时播放多个音频文件的flutter插件(android/ios).zip

    三、使用方法 1. 导入插件: ```dart import 'package:audioplayers/audioplayers.dart'; ``` 2. 初始化AudioPlayer实例: ```dart AudioPlayer audioPlayer = AudioPlayer(); ``` 3. 加载音频文件: ```dart ...

    flutter 3.X Http请求

    对于POST请求,可以使用`http.post()`方法: ```dart import 'dart:convert'; Future<void> postExample() async { final response = await http.post( Uri.parse('https://api.example.com/submit'), body: ...

    【第二章 flutter学习之Dart介绍】

    运行这个exe文件,按照向导提示进行安装,选择合适的安装路径,确保环境变量设置正确,以便在命令行中可以轻松调用dart和pub等命令。 2. 配置环境变量:安装完成后,需要将Dart SDK的bin目录添加到系统PATH环境变量...

    Flutter调用Android和iOS原生代码的方法示例

    在开发跨平台应用程序时,Flutter框架提供了一...需要注意的是,每个平台上实现的逻辑应与Flutter端声明的方法名保持一致,以便正确地进行通信。同时,处理任何可能出现的错误和异常是非常重要的,以确保应用的健壮性。

    object_detection_tflite:在Flutter框架中使用TFLite包进行对象检测

    3. **加载模型**:在你的Flutter应用中,使用`Tflite.loadModel()`方法加载模型。确保提供正确的模型路径和标签文件路径。例如: ```dart Future<void> _loadModel() async { await Tflite.loadModel( model: '...

    socket-flutter-bands-源码.rar

    【标题】"socket-flutter-bands-源码.rar" 提供的是一个使用Flutter开发的Socket通信库的源代码。在Flutter应用中,Socket通信是一种常见的网络通信方式,它允许应用程序通过TCP或UDP协议与服务器进行实时数据交换。...

Global site tag (gtag.js) - Google Analytics