十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
前端的同学对 Promise 肯定都很熟悉,而 Future 便是 dart 中 Promise ,但方法名称和使用方式还是有些许的差异的。
网站建设哪家好,找成都创新互联公司!专注于网页设计、网站建设、微信开发、成都小程序开发、集团企业网站建设等服务项目。为回馈新老客户创新互联还提供了惠安免费建站欢迎大家使用!
下面我们尝试,利用 Future 封装出js中我们熟悉的 Promise 。
使用示例
Promise.all , Promise.race , Promise.resolve , Promise.reject
Promise.allSettled 方法接受一组 Promise 实例作为参数,包装成一个新的 Promise 实例。只有等到所有这些参数实例都返回结果,不管是 fulfilled 还是 rejected ,包装实例才会结束。该方法由 ES2020 引入
Promise.any() 方法接受一组 Promise 实例作为参数,包装成一个新的 Promise 实例。只要参数实例有一个变成 fulfilled 状态,包装实例就会变成 fulfilled 状态;如果所有参数实例都变成 rejected 状态,包装实例就会变成 rejected 状态。该方法目前是一个第三阶段的 提案 。
Promise.any() 跟 Promise.race() 方法很像,只有一点不同,就是不会因为某个 Promise 变成 rejected 状态而结束。
顺便把 延迟函数 也封装一下,毕竟毫秒延迟的使用频率是最高的。
2020年1月14日
1.flutter clean后无法模拟器解决
尝试解决:
删除
定位分析是输出包名不一致导致。
解决:名字错误导致,如下改法即可。
备注:
修改步骤按如下步骤,不然下图2 Run Debug 还会不是Runner.app名字,导致一直报错
之后查看这里的命名是否正常:
第二步:最后在改这个plist
如果您发现本文对你有所帮助,如果您认为其他人也可能受益,请把它分享出去。
我认为的2020年前端开发者最应该掌握的一些比较火爆的技术与知识点。
1,前端框架和语言层面
9月份 Vue3.0 发布,声称对 TypeScript 有着更好的开发体验,通过从不同框架级别 TS 支持上,我们可以看出社区的整个风向从2019年的大家都去学习应用 TS,变成了大家如何把 TS 用的更好这个方向上来了。
所以我认为今年 TypeScript 的火热程度还是应该排名很靠前的,我今年也使用 TypeScript 重构了 Daruk 的服务框架推出了2.0版本,让 TS 开发者拥有更好的 TS 开发体验。
接下来就是两大重磅框架的更新历程对比,Vue3 前面说了一句。而 React 也在十月也发布了 React 17 的 release 版本。这两大主流框架的频繁更新,也说明了社区和作者都在一同演化。
在 Vue 3中除了更好的支持 TS 外,还更新了Composition API。而 React 17 主要是集中精力在升级体验上,虽然没有新的 Feature 但是提升了和解决了很多之前版本潜在的问题。
要说哪个最火还是要看个人实际的使用场景和喜好,但是2020年来看还没有别的框架可以与之一战。
2,大前端相关技术栈
今年基于Chromium的微软edge浏览器也已经推出。google 在 web 端的发展产生了对开发者深刻的影响。Chrome 80+ 也已经发布多个版本,提供了一系列的新特性,比如Core Web Vitals标准,Desktop PWA等都值得我们去关注。
我们说完了浏览器相关的那点技术之后,再聊聊大前端相关的一些技术实践,比如 Flutter。
很多前端在今年已经从 web 开发转型为 Flutter 开发,学习和使用 Dart 技术来构建 UI,这是很多大厂的前端工程师正在经历的事情(包括我的部门也在尝试这个事情),这个趋势应该在未来几年还会持续。
客户端 electron 在今年也有着长足的进展,一年内多次更新版本一路到了10.1.5。随着疫情影响,国内在线教育的又一波兴起。很多桌面软件,网课软件都在采用这个技术来进行开发,市场上的岗位也开始变多,electron 技术可以说在今年也有火的趋势。
然后我们再看看BFF 层,nestjs依然坚挺,越来越多的人开始跳过学习 express 和 koa 开始学习更丰富的 web 框架了,比如 egg 或者我的 daruk,开发者已经在慢慢形成共识,在 web framework 的路上开始越走越远,裸写 nodejs web 服务的时代已经开始慢慢褪去。
不得不提的还有 serverless 在前端的普及,在2020年到达了一个新的高潮。阿里云,腾讯云,头条云等等国内的互联网厂商也都开始大玩 serverless 概念。从对内服务开始转向对外服务,普及的势头很猛,也有落地的趋势和场景。今年的 D2同样也有 serverless 的专场,可见受重视程度非比寻常。
3,工程化提效和个人素质提升
再离我们近一些的推动生产力的技术,比如据我所知在用 CI/CD 和 pipeline 管理上线流程的公司越来越多,这种去年还可以出去吹一吹的东西,今年也逐步变成了业界标配基础能力,如果不会的同学可要抓紧学习了。
2019年前大家都疯狂吐槽面试刷 medium 题目没用,而2020年后大家开始默认面试某些公司都至少要刷到medium程度的题目。这对很多前端来说是一个心智和素质的提升与转变,大家在接触新技术的同时,也慢慢发现,前端整个职业环境的变化,越来越多的公司对人的整体综合素质要求变高了。
项目中存在一个输入框,只能提交中文字符串,于是使用了如下的方法实现
但是上线运行之后,发现在iOS原生拼音输入法中,只能一个字一个字输入,每次输入超过一个字就会直接变成拼音字母,并且长度限制在遇到中文拼音输入法后也会失效
于是通过自定义过滤器的方法,解决了这个问题
关键方法在于判断当前输入框是否存在未完成的字符串,如果存在,则不做限制,否则根据参数进行限制
但是属性 composing 听说还存在bug,使用的时候要注意,很有可能还有坑等着????
参考:
解决方案:
顿悟:
感谢???? Alex 大神!!!
在出现布局错误时能尽快找到错误原因。
以下是对关键内容的翻译和注解。
flutter的布局模型是“一步布局模型”(one-pass layout model),在渲染树中,向下treewalk传递给子 盒约束,然后再向上treewalk将计算好的几何形状(比如高度、宽度等)传递给父。我理解one-pass layout model就是一遍就将布局计算好。不会多次treewalk去计算布局,或多次重绘(repaint)并多次计算布局。
计算的好的几何形状必须符合盒约束的要求。
盒约束有四个值,minWidth,maxWidth,minHeight,maxHeight,符合盒约束的意思就是说 计算出的宽高必须在最大值和最小值之间 。
我猜测,在将盒约束向子传递的过程中,子会根据父的盒约束,设置自己的盒约束,而不是单纯的继承父的盒约束。稍后结合Flex布局可以解释。
盒约束的最小值和最大值相等。因此在tight约束下的子的高宽将等于父的高宽,也就是说子是紧紧(tight)贴着父的。
盒约束的最小值为0,也就是说子可以是小于盒约束最大值的任何值,也就是说子是不紧贴(松的,loose)父的。
盒约束的最大值不是infinite(无穷大)
盒约束的最大值是infinite(无穷大)
盒约束的最小值是infinite(无穷大),他的子的宽或高只能取无穷大。
子的宽高(Size)符合盒约束的要求。
以下摘抄原文档并翻译,并加以分析。为了关注要点, 忽略crossAxis方向(水平方向)的处理 。
以下图为Column布局实例。
给column布局进行了以下6步操作
首先给每个非flex子元素,设置竖直方向unbounded(无界)的盒约束。结合图片,也就是将1、2两个子设置好竖直方向无界的盒约束。示例中1和2设置了高度,因此一共占用高度是5+3=8.
按flex的比例给flex元素分配剩余的空间。因为示例只有一个flex元素,即3号元素,因此将占有剩余全部空间,高度是20-5-3 = 12。
在第二步中分配好空间的flex元素,给他设置的盒约束不是竖直方向unbounded(给非flex元素设置的是竖直方向unbounded),而是有界的盒约束,盒约束的maxHeight是12,即第二步中被分配的高度。
水平方向不解释了。高度设置完了他去设置宽度。
Column组件的总高度是由mainAxisSize属性决定的,如果值是MainAxisSize.max,Column的高度就是Column的盒约束的maxHeight值,示例中我们给Column设置了高度为20的bounded盒约束,假设Column.mainAxisSize=MainAxisSize.max,那么Column的高度就是20.如果mainAxisSize=MainAxisSize.min,Column的高度将由其子元素的高度和决定。假设3号flex元素不设置成flex元素,而是固定高度为8,那么Column的高度就是5+3+8=16.
设置子元素的位置,即设置靠左,靠右,居中,分散等,与本示例关系不大。
根据第一步,inner column被outer column设置了无界(unbounded)的盒约束,Column会紧包children,而inner column的Expanded要撑开以占用inner column的剩余空间,这就冲突了。
解决方案:给inner column设置有界的盒约束即可。比如给inner column外包一层有高度的Container。
下面这种方案,给inner column包一层Expanded也可以,是因为在outer column中,Expanded会被设置成有界的盒约束(结合第三步),因此Expanded就可以向外扩展(expand)了。
ModalRoute中的参数maintainState。其意义为:已经不可见(被上面的盖住完全看不到啦~)的组件,是否还需要保存状态。OverlayEntry类源码中说maintainState设置为true是昂贵的,但是如果maintainState为false,那当不可见时,对应的页面会被销掉,如果pop回去时重新创建的(State 会跑initState方法),那上个页面的状态就无法保持了。这可能也是MaterialPageRoute默认maintainState为true的原因。
这里的saveLayer()是说canvas的saveLayer()方法。一般用于合成特殊效果
可能触发 saveLayer() 并可能代价高昂的其他小部件:
避免调用 saveLayer() :