Flutter开发App的未来及其在各行业的应用潜力分析
912
2022-12-24
本文目录一览:
本文首发在公众号 Flutter那些事 ,欢迎大家多多关注。
工具安装:
Flutter基础篇:
Flutter进阶篇:
Dart语法基础篇:
Dart语法进阶篇:
说明:本文中的所有函数的引用在 main 函数中:
这里的执行结果是:
Futue直接new就可以了。求flutter进阶视频我这里没有具体的返回数据,所以就用匿名函数代替了, Future future = new Future(() = null); 相当于 Future<Null future = new Future(() = null); 泛型如果为null可以省略不写,为了便于维护和管理,开发中建议加上泛型。
输出结果是:
future里面有几个函数:
then :异步操作逻辑在这里写。
whenComplete :异步完成时的回调。
catchError :捕获异常或者异步出错时的回调。
因为这里面的异步操作过程中没有遇到什么错误,所以catchError回调不会调用。
求flutter进阶视频我们可以看到执行结果是:
我们可以看到输出结果是: 2 1 3 和我们创建Future对象的先后顺序完全一致。
我们可以看到结果为 1 2 3 ,和我们调用then的先后顺序无关。:
当then回调函数里面还有then回调的时候,这时候的流程跟前面就不太一样了,也是一个大坑,也是面试经常会被问到的一个知识点。
我们可以看到执行结果如下:
结果还是一样的:
运行结果是:
这里再次证明了上面我的猜想: 执行顺序和和创建Future的先后顺序有关,如果有多个then嵌套执行,先执行外面的then,然后执行里面的then。
执行结果如下,我们可以看到then内部创建的Future要等到then执行完了,最后再去执行的:
根据上文总结的特点,我们可以不用运行也能推断出输出结果:
为了验证我们的猜想,我们打印一下输出结果,果然我们的证明是正确的。
我们重点看看 then函数的文档说明:
then 注册在 Future 完成时调用的回调。
当这个 Future 用一个 value 完成时,将使用该值调用 onValue 回调。
如果 Future 已经完成,则不会立即调用回调,而是将在稍后的 microtask(微任务) 中调度。
如果回调返回 Future ,那么 then 返回的 future 将与 callback 返回的 future 结果相同。
onError 回调必须接受一个参数或两个参数,后者是[StackTrace]。
如果 onError 接受两个参数,则使用错误和堆栈跟踪时调用它,否则仅使用错误对象时候调用它。
onError 回调必须返回一个可用于完成返回的future的值或future,因此它必须是可赋值给 FutureOr <R 的东西。
返回一个新的 Future ,该 Future 是通过调用 onValue (如果这个Future是通过一个value完成的)或' onError (如果这个Future是通过一个error完成的)的结果完成的。
如果调用的回调抛出异常,返回的 future 将使用抛出的错误和错误的堆栈跟踪完成。在 onError 的情况下,如果抛出的异常与 onError 的错误参数“相同(identical)”,则视为重新抛出,并使用原始堆栈跟踪替代
如果回调返回 Future ,则 then 返回的 Future 将以与回调返回的 Future 相同的结果完成。
如果未给出 onError ,并且后续程序走了刚出现了错误,则错误将直接转发给返回的 Future 。
在大多数情况下,单独使用 catchError 更可读,可能使用 test 参数,而不是在单个 then 调用中同时处理 value 和 error 。
请注意,在添加-(listener)之前, future 不会延迟报告错误。如果第一个 then 或 catchError 调用在 future 完成后发生 error ,那么 error 将报告为未处理的错误。
Flutter教程全套 (全网独家)百度网盘免费资源在线学习
链接: https://pan.baidu.com/s/1Fev_q6Uh_b_8s2L2oMNwKg
提取码: m9z8Flutter教程全套 (全网独家)
第一套:Flutter 携程17章全-整理好
第五套:Flutter高仿谷歌翻译项目课程
第四套:两小时掌握Flutter移动App开发视频
第三套:flutter入门到精通全套
第七套:Flutter小实战20个
第六套:仿直聘boss的flutter完整教程
第九套:Flutter跨平台开发
第二套:flutter移动电商实战-技术胖
第八套:Flutter基础教程(基础不好的优先看)
24Flutter的打包.mp4
23静态资源和项目图片的处理.mp4
22页面跳转并返回数据_.mp4
21导航的参数传递和接受-2_.mp4
20导航的参数传递和接受-1.mp4
注:亮度调节和音量调节gif无法体现,功能是ok的,其次默认Icon锁的close和open实在难以分辨。
环境:Flutter 2.8.1 channel stable ;Dart 2.15.1
需要音频播放器的看这里: Flutter音乐播放器
重点说下这个工具类,因为视频播放,涉及到状态改变有很多,笔者刚开始选择使用 InheritedWidget 来在众多的widget之间共享数据。但是总感觉这样有点繁琐,且不很优雅!
这里非广告,如果是使用 GetX 就很简单了,笔者也使用了 GetX 进行封装了,一泻千里的赶脚!,但是笔者还是那句话:刚开始接触Flutter的开发者不是很建议使用 GetX ,可以先熟悉下Flutter状态管理的基础原理再行使用。而且为了尽量简洁,还是不引入其他的第三方了。
我们选择对第三方插件进行封装的目的不外乎这几个:
于是笔者就写了一个工具类 VideoPlayerUtils ,专门且只用来处理播放器的所有业务。包括暂停、播放、跳转、调节音量、调节亮度、切换视频等操作。在所有的widget中不会引用关于 video_player 或其他第三方插件的任何信息, VideoPlayerUtils 负责widget与播放器之间的所有操作交互。后续优化迭代或更换播放器插件时,只需针对这个工具类进行修改,对所有widget不会有任何的影响,大大的解耦合了。
其中 VideoPlayerState :
提供以上的公共属性,可以通过 VideoPlayerUtils 来获取对应的值,使用 get 只读,使外界不会误修改这些属性,以保证数值的安全性。开发者可根据自身需要自行添加属性。
提供以上方法来处理播放器的所有业务。同样的开发者可根据自身需要自行添加或修改。
重点说下这个方法,是整个业务的核心方法,控制视频的播放或暂停。开发者只要遇到播放或暂停是均可调用此方法,具体是播放或暂停,内部根据传入的 url 自行判断,开发者不需要关心。
切换新视频也是使用此方法,传入的 url 与上次不一致,自动切换新视频。笔者可根据 statusListener 来监听播放状态的改变,以此处理自身逻辑。
这个也需要提下,视频播放器在播放新视频时会异步初始化,一般我们的操作是在 initState() 初始化,成功后再 setState() 。这里笔者遇到一个让人蛋疼的问题:
我们看 video_player 的使用:
VideoPlayer(controller) :widget中已经持有了controller。本来笔者封装的目的就是为了让widget与controller的之间解耦合。但此时的笔者。。。。
放弃不是不可能放弃的,这辈子都不会放弃的!
于是笔者取了巧,写了一个初始化- initializedListener ,包换2个参数: bool,Widget ,初始化是否成功;其中widget为初始化成功返回需要展示的播放器UI,失败默认返回 const SizedBox() 。
到这里就可以简单使用了:
没看错,视频播放就是这么简单。
如果有更多的业务功能,笔者也按照自己的需求写了一套,同样的开发者可根据自身需要自行添加或修改。
VideoPlayerGestures 主要是处理手势的,比如快进、快退等跳转播放;左侧上下滑动调节亮度;右侧上下滑动调节音量;单击是否开启沉浸式播放,所有widget的隐藏与显示;双击播放、暂停等。
哦,还有 PercentageWidget 也放到这个文件下了,就是这玩意:
因为显示的百分比与手势相关,随着手势移动而更新。开发者可自行处理。
笔者处出于简单考虑,就按照整个UI的位置命名了。瞅一眼就知道是啥玩意。
同样的开发者可根据自身需要自行添加或修改。
就是这玩意:
同样的开发者可根据自身需要自行添加或修改。话说这个锁的 Icon 的open和close是真的难分辨!
就是这玩意:
同样的开发者可根据自身需要自行添加或修改。
这玩意是自定义的,别问,问就是跟产品干一架落了下风
主要就是自定义这玩意:
同样的开发者可根据自身需要自定义。
注:这里没有添加缓冲的进度,开发可查看 video_player 中的源码 VideoProgressIndicator ,按业务自行定义。
这玩意就是整合以上的widget,再考虑下全屏的安全区域,没啥东西。开发者可自行处理!
具体的实现-的思路, 看这里 。
自此一个漂亮的Flutter视频播放器就已经结束了。如果您觉得对您有些许帮助的话,欢迎 Star !
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~