iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >Flutter和Dart取消Future的方法有哪些
  • 273
分享到

Flutter和Dart取消Future的方法有哪些

2023-06-29 21:06:53 273人浏览 独家记忆
摘要

这篇文章主要介绍“Flutter和dart取消Future的方法有哪些”,在日常操作中,相信很多人在Flutter和Dart取消Future的方法有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Flutt

这篇文章主要介绍“Flutterdart取消Future的方法有哪些”,在日常操作中,相信很多人在Flutter和Dart取消Future的方法有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Flutter和Dart取消Future的方法有哪些”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

    使用异步包(推荐)

    async包由 Dart 编程语言的作者开发和发布。它提供了dart:async风格的实用程序来增强异步计算。可以帮助我们取消Future的是CancelableOperation类:

    var myCancelableFuture = CancelableOperation.fromFuture(  Future<T> inner,   { FutureOr onCancel()? })// call the cancel() method to cancel the futuremyCancelableFuture.cancel();

    为了更清楚,请参阅下面的实际示例。

    完整示例

    应用预览

    Flutter和Dart取消Future的方法有哪些

    我们要构建的应用程序有一个浮动按钮。按下此按钮时,将开始异步操作(这需要 5 秒才能完成)。按钮的背景从靛蓝变为红色,其标签从“开始”变为“取消”,现在您可以使用它来取消Future。

    • 如果您在Future完成前 5 秒内点击取消按钮,屏幕将显示“Future已被取消”。

    • 如果您什么都不做,则 5 秒后屏幕将显示“Future completed”。

    一个演示价值超过一千字:

    代码

    通过执行以下操作安装异步包:

    flutter pub add async

    然后运行:

    flutter pub get

    main.dart 中的完整源代码(附解释):

    // main.dartimport 'package:flutter/material.dart';import 'package:async/async.dart';void main() {  runApp(const MyApp());}class MyApp extends StatelessWidget {  const MyApp({Key? key}) : super(key: key);  @override  Widget build(BuildContext context) {    return MaterialApp(        // Remove the debug banner        debugShowCheckedModeBanner: false,        title: '大前端之旅',        theme: ThemeData(          primarySwatch: Colors.indiGo,        ),        home: const HomePage());  }}class HomePage extends StatefulWidget {  const HomePage({Key? key}) : super(key: key);  @override  _HomePageState createState() => _HomePageState();}class _HomePageState extends State<HomePage> {  // this future will return some text once it completes  Future<String?> _myFuture() async {    await Future.delayed(const Duration(seconds: 5));    return 'Future completed';  }  // keep a reference to CancelableOperation  CancelableOperation? _myCancelableFuture;  // This is the result returned by the future  String? _text;  // Help you know whether the app is "loading" or not  bool _isLoading = false;  // This function is called when the "start" button is pressed  void _getData() async {    setState(() {      _isLoading = true;    });    _myCancelableFuture = CancelableOperation.fromFuture(      _myFuture(),      onCancel: () => 'Future has been canceld',    );    final value = await _myCancelableFuture?.value;    // update the UI    setState(() {      _text = value;      _isLoading = false;    });  }  // this function is called when the "cancel" button is tapped  void _cancelFuture() async {    final result = await _myCancelableFuture?.cancel();    setState(() {      _text = result;      _isLoading = false;    });  }  @override  Widget build(BuildContext context) {    return Scaffold(      appBar: AppBar(title: const Text('大前端之旅')),      body: Center(        child: _isLoading            ? const CircularProgressIndicator()            : Text(                _text ?? 'Press Start Button',                style: const TextStyle(fontSize: 28),              ),      ),      // This button is used to trigger _getDate() and _cancelFuture() functions      // the function is called depends on the _isLoading variable      floatingActionButton: ElevatedButton(        onPressed: () => _isLoading ? _cancelFuture() : _getData(),        child: Text(_isLoading ? 'Cancel' : 'Start'),        style: ElevatedButton.styleFrom(            padding: const EdgeInsets.symmetric(vertical: 20, horizontal: 30),            primary: _isLoading ? Colors.red : Colors.indigo),      ),    );  }}

    使用 timeout() 方法

    这种方法既快速又简单。但是,它不是很灵活。

    使用timeout()方法,您可以限制Future的时间(例如 3 秒)。如果 future 及时完成,它的值将被返回。另一方面,如果Future超过限制时间,将执行onTimeout函数:

    Future<T> timeout(   Duration timeLimit,  {FutureOr<T> onTimeout()?})

    快速示例

    创建一个虚拟的Future:

    Future<String?> _myFuture() async {    await Future.delayed(const Duration(seconds: 10));    return 'Future completed';}

    设置超时 3 秒:

    _myFuture().timeout(      const Duration(seconds: 3),      onTimeout: () =>          'The process took too much time to finish. Please try again later',);

    将Future转换为流

    您可以使用 Future 类的asStream()方法来创建一个包含原始Future结果的流。现在您可以取消对该流的订阅。

    快速示例

    // don't forget to import thisimport 'dart:async';// Create a demo futureFuture<dynamic> _loadData() async {    await Future.delayed(const Duration(seconds: 10));    return 'Some Data';}// a reference to the stream subscription// so that we can call _sub.cancel() laterStreamSubscription<dynamic>? _sub;// convert the future to a stream_sub = _loadData().asStream().listen((data) {    // do something with "data"    print(data); });// cancel the stream subscription_sub.cancel();

    请注意,这个快速示例仅简要描述了事物的工作原理。您必须对其进行修改以使其可在现有项目中运行。

    到此,关于“Flutter和Dart取消Future的方法有哪些”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

    --结束END--

    本文标题: Flutter和Dart取消Future的方法有哪些

    本文链接: https://www.lsjlt.com/news/326465.html(转载时请注明来源链接)

    有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

    本篇文章演示代码以及资料文档资料下载

    下载Word文档到电脑,方便收藏和打印~

    下载Word文档
    猜你喜欢
    • Flutter和Dart取消Future的方法有哪些
      这篇文章主要介绍“Flutter和Dart取消Future的方法有哪些”,在日常操作中,相信很多人在Flutter和Dart取消Future的方法有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Flutt...
      99+
      2023-06-29
    • 详解Flutter和Dart取消Future的三种方法
      目录使用异步包(推荐)完整示例使用 timeout() 方法快速示例将Future转换为流快速示例结论使用异步包(推荐) async包由 Dart 编程语言的作者开发和发布。它提供了...
      99+
      2024-04-02
    • 使用Dart开发Flutter应用的技巧有哪些
      小编给大家分享一下使用Dart开发Flutter应用的技巧有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!发布模式判断判断当前环境是否为发布模式。const&...
      99+
      2023-06-04
    • 取消git add命令的方法有哪些
      本文小编为大家详细介绍“取消git add命令的方法有哪些”,内容详细,步骤清晰,细节处理妥当,希望这篇“取消git add命令的方法有哪些”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。方法一:使用git res...
      99+
      2023-07-05
    • Win10开机密码取消的方法有哪些
      有以下几种方法可以取消Win10开机密码:1. 使用控制面板取消密码:按下Win + X组合键,选择“控制面板”,然后选择“用户账户...
      99+
      2023-08-22
      Win10
    • 消除if...else的方法有哪些
      这篇文章主要介绍“消除if...else的方法有哪些”,在日常操作中,相信很多人在消除if...else的方法有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”消除if.....
      99+
      2024-04-02
    • react和flutter的区别有哪些
      本篇内容介绍了“react和flutter的区别有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成! ...
      99+
      2024-04-02
    • Flutter组件状态管理的方法有哪些
      这篇文章主要为大家展示了“Flutter组件状态管理的方法有哪些”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Flutter组件状态管理的方法有哪些”这篇文章吧。前言前面讲了Flutter布局,...
      99+
      2023-06-29
    • JavaScript中取整的方法有哪些
      这篇文章主要讲解了“JavaScript中取整的方法有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“JavaScript中取整的方法有哪些”吧! ...
      99+
      2024-04-02
    • Flutter之Navigator的高级用法有哪些
      本篇内容介绍了“Flutter之Navigator的高级用法有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!named routes虽然...
      99+
      2023-07-05
    • Flutter验证码输入框的实现方法有哪些
      Flutter验证码输入框的实现方法有哪些,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。重点是什么?真实世界的 完美的验证码输入框或 PIN 输入 UI 通常满...
      99+
      2023-06-22
    • jquery有哪些读取节点的方法
      本篇内容介绍了“jquery有哪些读取节点的方法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成! ...
      99+
      2024-04-02
    • python向下取整的方法有哪些
      在Python中,可以使用以下方法进行向下取整: 使用整除操作符 //,它将结果截断为最接近的小于或等于原始值的整数。 x = ...
      99+
      2024-02-29
      python
    • c#取绝对值的方法有哪些
      在C#中,可以通过以下方法来取得一个数的绝对值: Math.Abs() 方法:该方法返回一个数的绝对值。 int num = -...
      99+
      2024-03-15
      c#
    • python字典取值的方法有哪些
      这篇文章主要讲解了“python字典取值的方法有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“python字典取值的方法有哪些”吧!Python 字典(dictionary)是一种可变容...
      99+
      2023-07-06
    • python获取cookie值的方法有哪些
      在Python中获取cookie值的方法有以下几种:1. 使用requests库:可以通过`response.cookies`获取服...
      99+
      2023-10-11
      python
    • python元组取值的方法有哪些
      Python元组的取值方法有以下几种:1. 索引取值:使用元组的索引来获取指定位置的元素。例如,`tuple_name[index]...
      99+
      2023-10-12
      python
    • GoLang读取文件的方法有哪些
      这篇文章主要介绍“GoLang读取文件的方法有哪些”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“GoLang读取文件的方法有哪些”文章能帮助大家解决问题。一. 整个文件读入内存直接将数据直接读取入内...
      99+
      2023-07-02
    • tensorflow读取文件的方法有哪些
      在TensorFlow中,读取文件的方法有以下几种: 使用tf.io.gfile.GFile()函数读取文件,该函数可以打开本地...
      99+
      2024-03-15
      tensorflow
    • php获取请求的方法有哪些
      这篇“php获取请求的方法有哪些”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“php获取请求的方法有哪些”文章吧。一、GET...
      99+
      2023-07-05
    软考高级职称资格查询
    编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
    • 官方手机版

    • 微信公众号

    • 商务合作