前语

在开发过程中,撤销需求是很常见的,但很容易被疏忽。然而,撤销需求的好处也很大。例如,在页面中会发送很多恳求。假如页面被切走并处于不行见状态,就需要撤销未完成的恳求使命。假如未及时撤销,则可能会导致以下负面影响:

  1. 消耗用户额外数据流量。
  2. 使命回调持有全局上下文变量,未及时开释存在内存泄漏危险
  3. 异步恳求过多消耗很多系统资源,拖慢 UI 线程,形成卡顿。

Flutter 中,怎么撤销已经在进行的使命呢?首要需要把握一些基础知识。

前置知识

Future#any 办法

传入一个 Future 使命列表,回来第一个完成的异步使命,不管成功或失败。

定义

Flutter 中如何取消任务

用法

如下 5 个异步使命,代码第五行虽然第二履行,但是最先履行结束,所以第一个回来,至此整个 Future.any 函数履行结束。

Flutter 中如何取消任务

成果输入如下:

Flutter 中如何取消任务

总结

  • Future.any 实践便是一个 Completer,N 个 Future 叠加在一起,谁先完成算谁的。
  • Future.any 可以理解成百米赛跑,其中每个选手便是一个 Future,谁跑最快到终点谁就赢了。

Dio 撤销实现解析

dio 版本

dio: dev v5.0.3

git: 67f07b86a0976c14a6e19061563832d92ed6772b

branch: main

怎么撤销

恳求中传入 CancelToken 目标,然后调用 token.cancel 办法即可

final cancelToken = CancelToken();
dio.get(url, cancelToken: cancelToken).catchError((DioError err) {
  if (CancelToken.isCancel(err)) {
    print('Request canceled: ${err.message}');
  } else{
    // handle error.
  }
});
// Cancel the requests with "cancelled" message.
token.cancel('cancelled');

流程解析

思路:在实践使命履行前使用 Future.any 函数插入撤销使命。假如实践使命没有履行完,就有时机撤销它。

如下代码,黄色标示依照过程来读就行。

Flutter 中如何取消任务

总结:CancelToken 就像一个渣男,而 Future.any 则供给了公平竞争的时机。只需妹子还没有交男朋友,渣男就有时机中途得手。

阐明

撤销使命不只限于网络恳求。任何实践事务中包含不必要的耗时操作都可以通过 Future.any 配合 CancelToken 来实现撤销。

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。