flutter开发实战-Completer实现将回调Callback转换成Future返回结果

Flutter 接口回调callback 具体实现案例 前言 : 各位同学大家好 有段时间没有给大家更文章了 ,在安卓和IOS 我们常用接口回调俩进行界面和方法调用的时候进行通信,写法也比较直接明了 今天我们就分享flutter里面怎么使用 。 准备工作: 需要安装flutter的开发环境:大家可以去看看之前的教程: 1 win系统flutter开发环境安装教程: https://www.jianshu.com/p/152447bc8718 2 mac系统flutter开发环境安装教程:https://www.jianshu.com/p/bad2c35b41 阅读详情

flutter开发实战-Completer实现将回调Callback转换成Future返回结果

一、Future

Dart是单线程模型语言,如果需要执行一些延迟的操作或者IO操作,默认采用单线程同步的方式就有可能会造成主isolate阻塞,从而导致渲染卡顿。基于这一点我们需要实现单线程的异步方式,基于Dart内置的非阻塞API实现,那么其中「Future就是异步中非常重要的角色。Future表示异步返回的结果,当执行一个异步延迟的计算时候,首先会返回一个Future结果,后续代码可以继续执行不会阻塞主isolate,当Future中的计算结果到达时,如果注册了 then 函数回调,对于返回成功的回调就会拿到最终计算的值,对于返回失败的回调就会拿到一个异常信息」。

这部分参考https://zhuanlan.zhihu.com/p/353578352

当然这里并不是介绍Future,我们下面使用Completer实现将回调Callback转换成Future返回结果

二、Completer

Completer是一种生成Future对象并稍后返回一个value或者error来完成他们的方法。
大多数情况下,创建一个Future最简单的方式,就是使用Future构造方法,来捕获单个异步计算。

例如

Future doStuff(){
   return someAsyncOperation().then((result) {
     return someOtherAsyncOperation(result);
   });
}
    

但是,当你需要将基于回调的API转换为基于Future的API时,这时候就需要使用Completer

例如

 class AsyncOperation {
   final Completer _completer = new Completer();

   Future<T> doOperation() {
     _startOperation();
     return _completer.future; // Send future object back to client.
   }

   // Something calls this when the value is ready.
   void _finishOperation(T result) {
     _completer.complete(result);
   }

   // If something goes wrong, call this.
   void _errorHappened(error) {
     _completer.completeError(error);
   }
 }
    

三、Completer实现Callback转换Future

在上面中的AsyncOperation,可以使用Completer来将回调的API转换成Future的API,下面列出一个具体的实例。

代码中有一个获取用户签名的Api,通过封装的Callback来获得具体的userSign,在需要使用的方法中需要返回一个Future。

这里就用到了Completer

具体代码如下

// userSign过期获取接口
class UserSignFetcherImpl implements UserSignFetcher {
  @override
  Future<String> getUserSign(String userId) {
    // TODO: implement getUserSign

    Completer<String> completer = Completer();
    UserSignReq req = UserSignReq();
    req.userId = userId;

    ApiRepository.getUserSign(DFaceApiConstant.kGetByUserId, req: req)
        .then((value) {
      print("getUserSign value:${value}");
      completer.complete(value);
    }).whenComplete(() {
      print("whenComplete");
    }).catchError((e) {
      print("catchError e:${e}");
      completer.completeError(e);
    });

    return completer.future;
  }
}
    

这里就可以将接口Callback的结果,通过completer.complete与completer.completeError将结果转换为基于Future的返回的方法了。

四、小结

flutter开发实战-Completer实现将回调Callback转换成Future返回结果

学习记录,每天不停进步。

在Flutter中处理网络请求 通过以上步骤,我们已经成功地在Flutter中处理了网络请求。这个例子展示了如何使用http库发送GET请求,解析响应,并处理错误。希望这个实例能够帮助你理解在Flutter中处理网络请求的方法。 阅读详情

相关推荐

flutter VoidCallBack ValueChange<T> 的函数定义

在 Flutter 中,和是两种常用的回调函数类型,它们通常用于处理事件或传递数据。下面是它们的详细定义及使用方式。

Rey的技术博客 466

flutter之Completer

参考: Dart 关于Completer

yzpbright的博客 3893

告别抓包失败!保姆级配置:让Burp+Proxifier稳定抓取任意微信小程序

本文提供了一套完整的Burp+Proxifier配置方案,确保稳定抓取微信小程序数据。从环境准备、工具选型到Burp Suite深度配置和Proxifier精准设置,详细解决了证书安装、进程捕获和乱码解析等核心问题,帮助开发者告别抓包失败,提升调试效率。

weixin_28738165的博客 454

Flutter 好用的Completer,配合for循环,让任务挂起,等待主动回调再执行

有个场景就是 ,我有一组组的数据,需要异步处理,但是又不是很及时响应,需要另外一个主动推消息过来告诉我,这个异步执行完成了有结果了。这个时候我们可以使用Completer 来完成。 说明: 当我们点击了 “开始任务” , 就会进入一个循环里面执行 打印事件,而我们需要这个打印事件真正完成的时候才会继续发送下一条数据去打印,这个时候假设在等待中,我们跟着点击一下模拟器的回调 “执行下一个” , 这个时候会发现 才会执行循环里面的下个发送事件, 这样可以让事件在有序的等待回调 Widget 代码 Contain

xixi 3807

【NLG】(六)文本生成评价指标—— ROUGE原理及代码示例

前奏: 【NLG】(一)文本生成评价指标——BLEU原理及代码示例 【NLG】(二)文本生成评价指标—— METEOR原理及代码示例 【NLG】(三)文本生成评价指标—— ENTROPY原理及代码示例 【NLG】(四)文本生成评价指标—— diversity原理及代码示例 【NLG】(五)文本生成评价指标—— kl_divergence原理及代码示例 1.ROUGE原理 2.优缺点 3.如何算ROUGE ...

凝眸伏笔的博客 1万+

面板数据分析中的随机前沿软件FRONTIER Version 4.1应用

随机前沿模型是一种用于评估单位效率的统计方法。它考虑了输入和输出的随机性,允许我们在效率评估中引入不确定性。随机前沿模型通常用于评估生产单位、金融机构、医院等各种类型的决策单元的效率。FRONTIER是一个广泛使用的随机前沿分析软件,具有用户友好的界面和强大的功能。它提供了估计效率、前沿分析和模型比较的工具,使用户能够深入研究单位的效率和绩效。面板数据是一种包含多个单位(通常是时间序列数据)的数据类型,可以用于分析单位在不同时间点的变化和效率。

目标检测专栏持续更新中,改进YOLO系列通用,适用v5、v7、v8、所有博客均是团队原创博客,所有文章禁止转载,违者必究。 2982

Flutter&Dart Callback转同步

怎么将一个Callback回调转化成Future同步方法(Callback to Future),可以配套async / await去使用呢?

小小涛的博客 1120

Ollama内网离线部署大模型实战:从模型文件到私有化服务

本文详细介绍了如何在内网离线环境下,利用Ollama部署私有化大模型服务。内容涵盖从获取GGUF格式模型文件、手动安装Ollama、编写核心Modelfile配置文件,到创建运行模型、性能调优及安全加固的全流程实战指南,旨在帮助企业安全、可控地构建内部AI能力。

weixin_29209805的博客 214

Flutter插件在OpenHarmony的跨平台适配实践

跨平台开发框架Flutter通过与原生平台的深度集成,实现了高效的移动应用开发体验。在技术实现上,Flutter插件机制充当了Dart代码与原生平台API之间的桥梁,特别是在处理平台特定功能时尤为关键。以OAuth认证场景为例,flutter_web_auth插件通过封装系统浏览器交互逻辑,为应用提供了标准化的认证流程。当这一技术方案迁移到OpenHarmony平台时,开发者需要理解其独特的Ability框架和Want机制,重新实现浏览器启动、URL重定向捕获等核心功能。本文以实际工程案例展示了如何在Ope

cuibinmo3519的博客 309

【文献笔记】ICCV 2021 | Point Transformer

作者提到,特别适合点云处理,因为自注意力机制是的核心,本质上就是一个集合算子:它对输入元素具有顺序不变性和数量不变性3D点云是无序的,即使改变点云txt文件中的点顺序也不会有任何影响。自注意力机制天然具有排列不变性,因为它通过对所有"点对"的关系进行建模来处理输入,而不依赖于任何特定的输入顺序点云数据通常覆盖了3D空间中的对象或场景,理解这些数据需要捕捉点与点之间复杂的空间关系。自注意力机制能够有效的捕捉这些关系,因为它为每个"点对"赋予一个。

m0_55908255的博客 965

vue3 - 实现WebRTC播放实时rtsp视频流+NVR录像机回放,web前端浏览器网页播放RTSP推流,支持海康威视大华等摄像头/监控设备对接(监控摄像头录像及回放,拿到rtsp视频流如何处理)

vue3,webrtc-streamer,rtsp视频流,监控画面,nvr录像机,回放功能,监控摄像头设备,vue3播放Rtsp推流示例代码,前端如何在vue3项目中播放rtsp视频流,VUE中播放RTSP实时推流播放解决方案,vue3 webrtc播放rtsp视频流,vue3实现rtsp视频流浏览器实时播放,海康摄像机、NVR、流媒体服务器、回放取流RTSP地址,vue3+vite+ts 使用webrtc-streamer播放海康rtsp监控视频,播放海康rtsp监控视频,海康摄像机/录像机预览+回放RT

✅ 精选推荐文章 1万+

flutter 中实现前端的promise

利用Future 和Completer。Future 是异步无状态的 Completer可以返回Future 里面有3种状态。用法改了一下 使用 Promise.run =》Promise。组合一下 就是前端的promise。

weixin_43575775的博客 4万+

模型瘦身术:YOLOv5无损剪枝实战教程

本文介绍了一种YOLOv5模型的无损剪枝方法,通过"稀疏训练+结构化剪枝+微调"的流程,在不损失精度的前提下显著减小模型尺寸并提升推理速度。具体步骤包括:1)稀疏训练给参数排优先级;2)裁剪不重要通道;3)微调恢复精度;4)验证效果。实战部分详细展示了从环境搭建到剪枝实现的完整流程,并分析了剪枝后在边缘设备部署、实时检测等场景的优势。该方法可使YOLOv5s模型从14MB缩减至2-3MB,推理速度提升30%-50%,适用于资源受限设备的轻量化部署需求。

LXY_LOVE36的博客 104

Flutter与鸿蒙的JS交互适配实践

在跨平台开发中,JavaScript与原生语言的交互是实现混合应用的关键技术。通过类型系统映射和代理模式,开发者可以构建高效的跨语言通信桥梁。Flutter的js_wrapping库正是此类技术的典型实现,它通过自动完成Dart与JS对象的双向转换,显著提升了开发效率。随着鸿蒙系统的普及,适配QuickJS引擎的特殊性成为技术难点,包括线程模型差异、类型系统兼容等问题。本文以电商3D展示模块为例,详细解析如何改造对象包装机制、优化内存管理策略,最终实现在鸿蒙平台稳定运行Flutter+Three.js的混合

weixin_30889885的博客 429

【OpenClaw从入门到精通】第63篇:A股智能分析实战——用OpenClaw搭建个人量化研究助手(2026实测版)

2026年,OpenClaw已成为量化投研圈的现象级工具,八家头部券商密集发布专题研报力证其价值。传统量化投研面临技术门槛高、重复劳动多、策略迭代慢、非结构化数据处理弱四大痛点,而OpenClaw通过“AI智能体+金融Skill+量化API”的融合,实现了从数据获取、策略生成、回测验证到持仓监控的全流程自动化。本文基于2026年最新实测经验,完整呈现个人量化研究助手搭建:从阿里云部署、阿里云百炼API配置(含解析失败解决方案)、Tushare数据源接入,到PB-ROE价值选股、研报复现、自动化回测、持仓监控

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 1059

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

JWT技术原理与前端安全实践指南

JSON Web Token(JWT)是一种基于JSON的开放标准(RFC 7519),用于安全地在网络应用间传递声明信息。其核心由Header、Payload和Signature三部分组成,通过数字签名确保数据完整性。在Web安全领域,JWT常用于无状态认证,相比传统Session机制更适用于分布式系统。前端开发中需特别注意XSS/CSRF防护,合理选择localStorage、sessionStorage或HttpOnly Cookie等存储方案。通过Axios拦截器可实现自动化令牌管理,而.NET C

weixin_30421809的博客 352

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

Completer的用法

在 Flutter 和 Dart 中,Completer是一个用于手动控制Future对象的类。它允许你在未来的某个时间点完成一个异步操作,并且可以在异步操作完成时提供结果或错误。Completer通常用于需要手动完成Future的场景,例如在事件驱动的编程中。Completer。

u012109822的专栏 887

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Flutter中的Completer

Dart中的Completer类允许手动控制Future的完成时机,将异步操作结果与完成控制分离。它提供complete()和completeError()方法来主动完成Future,适用于回调转Future、多异步操作管理、超时控制等场景。相比直接使用Future,Completer提供了更灵活的控制能力,但在简单场景下建议优先使用async/await。关键点包括:1) Completer是Future的控制器;2) 可手动决定完成时机;3) 常用于旧代码改造和复杂异步流程管理;4) 需注意避免内存泄漏

梦想不只是梦与想的博客 757

[Flutter]Completer和compute

Completer是一个允诺机制,功能类似于Future方法的await操作,等待结束之后的下一步执行。他可以处理防抖,单独执行某一块异步任务(类似同步锁),lanbda方式回传参数变future处理(Chanel的桥接处理内部实现)等。compute用于在flutter单线程中实现“多线程”,功能属于删减版的Isolate。Isolate在此之上还可以用于多个“线程”在执行中进行通信等操作。2.同步聊聊Isolate,以及他的多线程间的通信操作。下面,可以通过例子来分别介绍一下。二、Completer。

曹世鑫的杂谈 675

flutter 确定图片的宽度和高度,用的是completer回调

不能用Future,用的是completer回调,一般如果你的异步操作是带回调的不能即时返回结果的类型,你需要用到 Completer。

weixin_44911775的博客 887

【Flutter 异步编程 -伍】 | 深入剖析 Future 类源码实现

theme: cyanosis 本文为稀土掘金技术社区首发签约文章,14天内禁止转载,14天后未获授权禁止转载,侵权必究! 张风捷特烈 - 出品 一、Future 中的监听与通知 在日常开发中,我们一般知道对 Future 对象通过 then、onError 设置回调方法进行监听。但很少有机会了解 Future 中的回调是何时触发的, Future 像一个黑箱一样,对它越...

张风捷特烈的博客 782

dart的completer有点像oc的delegate

iOS中,对象的delegate也是一个对象。 dart中 completer也是一个变量。 iOS中,使主调方收到调用,调用delegate对象对应的方法就可以了。 dart中,调用completer对象的complet方法,主调方就收到了future回调。 ...

gaoyp的专栏 358

算法演绎 | 巧妙的 Completer 完成器

theme: cyanosis 0. 缘起 最近几个月接触了些算法题,然后想个有趣的点子: 是否可以用 Flutter 做一个交互应用,可视化 地展示算法执行过程中的变量的信息。 比如拿一个最简单的累加算法来说,启动算法之后,每次点击下一步,界面上会展示出该步对应的变量信息。就可以可视化地呈现出一个算法运算过程中变量的变化情况。 dart int sum(int count) ...

张风捷特烈的博客 1132

flutter异步相关

zipWith。

haoxuhong的博客 642

Flutter实战详解--高仿好奇心日报

针对Android程序员,我这边给大家整理了一些资料,包括不限于高级UI、性能优化、架构师课程、NDK、混合式开发(ReactNative+Weex)微信小程序、Flutter等全方面的Android进阶实践技术;希望能帮助到大家,也节省大家在网上搜索资料的时间来学习,也可以分享动态给身边好友一起学习!往期Android高级架构资料、源码、笔记、视频。高级UI、性能优化、架构师课程、混合式开发(ReactNative+Weex)全方面的Android进阶实践技术,群内还有技术大牛一起讨论交流解决问题。

pckzzy119的博客 939
上一篇: flutter开发实战-TweenSequence实现动画序列
下一篇: flutter开发实战-为ListView去除Android滑动波纹
BruceGwo
博客等级 码龄16年 549粉丝 278原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值