十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
本文首发在公众号 Flutter那些事 ,欢迎大家多多关注。
成都创新互联主要从事网站建设、网站制作、网页设计、企业做网站、公司建网站等业务。立足成都服务珲春,十年网站建设经验,价格优惠、服务专业,欢迎来电咨询建站服务:18980820575
工具安装:
Flutter基础篇:
Flutter进阶篇:
Dart语法基础篇:
Dart语法进阶篇:
说明:本文中的所有函数的引用在 main 函数中:
这里的执行结果是:
Futue直接new就可以了。我这里没有具体的返回数据,所以就用匿名函数代替了, Future future = new Future(() = null); 相当于 FutureNull future = new Future(() = null); 泛型如果为null可以省略不写,为了便于维护和管理,开发中建议加上泛型。
输出结果是:
future里面有几个函数:
then :异步操作逻辑在这里写。
whenComplete :异步完成时的回调。
catchError :捕获异常或者异步出错时的回调。
因为这里面的异步操作过程中没有遇到什么错误,所以catchError回调不会调用。
我们可以看到执行结果是:
我们可以看到输出结果是: 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 将报告为未处理的错误。
以下主要针对 MethodChannel 这种常用通信方式做详细分析。
关于 MethodChannel 方式相互调用的流程简图如下:
消息的编码与解码 MessageCodec ,Dart 和 native 侧分别有四种编码方式,两端都是一致的。
无论是 Dart 调用 Android,还是 Android 调用 Dart,均使用 invokeMethod() 触发调用 以及 setMethodCallHandler() 监听调用事件进行。
1)调用 Native 方法 getMessage : MethodChannel.invokeMethod('getMessage')
2)Native 监听方法调用并执行对应方法 Native 逻辑
3)如果需要回传 Native 数据给 Dart,则使用:result.success() 传递数据,该结果直接从上述 invokeMethod() 方法可获取到。
1)Dart 调用 Native 方法,Native 侧可以直接使用 MethodChannel.Result 回传数据给 Dart,但是一次通信过程中, result.success() 方法只能调用一次,否则就会出现以下异常:
解决方法,如果要持续传递 Native 数据给 Dart,则直接使用 invokeMethod() 方法,Dart 侧监听到自己方法调用,再做处理。
本篇主要整理 flutter 中多组件布局用法。
以 Row 为例说明, Column 先省略。
flutter 中的弹性布局,主要使用 Flex 和 Expanded 配合实现。
参考资料:
flutter目前最火的混合开发技术,作为苦逼的移动开发人员了解下总是没有错的,针对最近自己的学习,进行相关总结,希望在座的看官,看完此文后,能对flutter移动开发有个大概的了解,希望能给你开发flutter带来个大体的认知,由于学习接触时间不过,如有讲错的地方,请在评论区指出,谢谢;
注:经过多重比较,个人觉得AS是比较适合flutter移动开发的,集成方便,插件支持多,不亏是google大佬的亲儿子,安卓开发人员过渡也比较方便;
程序入口指定,也可以指定为别的widget;
从左往右的功能对应:
在文章开篇的时候,我有提过,在flutter开发里面,可谓一切界面皆是widget,对于安卓开发人员,可以理解为增强版fragment(碎片),基本所有的和界面相关的实现都在当中实现。
说到widget就必须聊到今天一个很重要的主题,StatelessWidget, StatefulWidget,因为大部分界面的实现都需要通过集成他们来实现界面显示。
注:有前端用flex开发使用的经验的同学,完全可以参考flex属性使用。
这两周面试遇到的算法题,都是需要手写实现,本人算法相当菜,面试之前也没刷题的概念,所以算法答的很不好,下面只简单说下都遇到了哪些吧。
该问题被问到过三次,应该是相当高频的吧,第一次我只想到了下面的第一种方法,面试官很nice,引导着我给出了第二种解决方案
1-2-3-4 交换之后为 2-1-4-3.(基本没有写出来,当时面试官问我你没刷题吗,我实话实话没刷过)
被问到过两次,第一次是某公司的技术负责人,人超级好,我第一中解法用的栈实现的,然后就问我时间复杂度和空间复杂度是多少,还耐心给我讲解这两个的概念和如何计算,然后又让我想第二种解法,第二种我写的是chartAt实现,面试官又问时间复杂度和空间复杂度是多少,然后让我再想更优的解法,最后在面试官的开导下写了下面第三种实现,特感谢这位面试官。
当时大体写出来了 但是临界值判断错了
当时是写出来了,但是方法很笨,之后去看了下源码,膜拜啊
就遇到了这五个算法,其中一个出现过三次,一个出现过两次,觉得自己还是挺幸运的吧。希望大家在找工作前多看看算法吧,这个是面试必问的,而且是手写实现,最近两天也在看算法,感觉大神们的想法真的太好了,自己是很难想到这些思路的。
1.Handshake error in client(OS Error: CERTIFICATE_VERIFY_FAILED: ok(handshake.cc:352))
打开~/.ios/Runner.xcworkspace,选择项目对应的证书
然后pod install
ps:我这边是通过以上方法解决,但是不确定是通过以上哪一步,预计是选择项目证书解决的
2.Cannot find "xcodebuild". Xcode 11.0 or greater is required to develop for iOS.
Could not build the precompiled application for the device.
Error launching application on iPhone7ll.