感谢开源中国-高手问答栏目提供平台,原地址:https://www.oschina.net/question/2720166_2302950
本文节选了18个问题的讨论。
回答问题的嘉宾介绍:亢少军 捷智云视频会议系统联合创始人,国内首本Flutter出版书籍作者,著有《Flutter技术入门与实战》。多年从事流媒体技术研发,对于 Android,iOS 等开发技术有比较深入的研究和应用,作为主要程序员开发了多个应用项目,涉及医疗、交通、银行等领域。
CSDN-blog:https://blog.csdn.net/kangshaojun888
Github:https://github.com/kangshaojun
1Q:请问Flutter的优势是什么?另外小白新手如何从入门到精通,学习路线请教一下。
A:优势就是性能好,跨平台。建议先学基础组件,因为flutter里有一个很重要的概念是:一切皆为组件。然后学习基本的页面布局,前后端网络数据请求,路由导航,手势,动画等知识。涉及到需要调用原生的功能,比如打开相机,蓝牙,获取电池电量等还需要学习flutter插件开发知识。
2Q:Flutter有什么非常大优点吗?你最感兴趣的是什么地方?你基于什么理由选择这个框架?和现有的框架有什么优势?除开是新技术外,我们为什么一定要学习它,有什么推荐的理由么?
A:我们是因为Flutter性能高的原因,选择了Flutter。并开源了一个Flutter webrtc项目,因为我们团队是做音视频开发的,所以对性能要求很高。另外还有一个原因是它酷炫的界面,很有动感,符合现代界面设计需要。还有一个最大的原因是可以Flutter跨很多平台,macOS/windows/linux/android/iOS以及嵌入式,这大大减少了开发及维护的工作量。
3Q:跟流行的React-native相比有什么区别?目前在国内流行吗?
A:个人觉得Flutter比RN做得更专业一些,运行流畅,有一种丝滑版的体验。还有开发调试上比RN的工具好用。RN调度过程中总是有一些莫名其妙的的问题。我是从adobe air --->cordova---> rn ---> Flutter一路走过来。
4Q: Flutter最大的诟病是嵌套太多层的问题,有什么方式能够解决这个问题?
A:这个我一开始也觉得嵌套太多,不过合理拆分,写多了自然就不觉得乱了。比如:一个页面先从垂直方向拆分成几块,再从水平方向拆分。另外vscode及androidstudio可以在结束的位置有提示代码范围也方便。可以看我的博客一个一个学习组件:https://blog.csdn.net/kangshaojun888
5Q:现在有哪些比较知名的项目和公司使用了Flutter?
A:闲鱼和爱奇艺就是Flutter开发的 ,好多公司在Flutter没有发布正式版本之前已经上架了很多app了。与原生的app、混合式app、web app相比可以查一下。
6Q:目前打包的包体积有多大?效率比起原生怎么样?
A:打包的体积稍微大一些,helloworld这种大概有30m左右。性能不亚于原生。
7Q:Flutter对iOS支持如何,能不能替代iOS原生开发?
A:可以开发iOS应用,甚至macOS桌面应用。个人认为可以替代。
8Q:你好,我刚接触Flutter不久,之前接触过react所以对Flutter大体设计能有一定的理解,但是对build中的BuildContext感觉把握不准,这个参数在Flutter是一种什么概念,结构又该怎样理解?感谢指教。
A:BuildContext抽象类,它表示一个控件在整个控件树中的位置句柄,每个控件都有自己的BuildContext实例。 某些静态函数(例如Theme.of等)也有BuildContext实例,以便它们可以代表调用控件或专门针对给定上下文获取数据。
9Q:Flutter和目前的react native(基于react)、weex(基于vue)、native script(基于angular)的底层运行有什么区别,是不是也是通过dart封装底层api,方便上层调用。另外,现在js很火,dart和js相比有哪些优缺点,为什么要学习一门新的编程语言和框架,有什么优势?
A:关于对比引用一段话:Flutter吸收了cordova及rn的教训之后,在渲染技术上,选择了自己实现(GDI),由于有更好的可控性,使用了新的语言Dart,避免了RN的那种通过桥接器与Javascript通讯导致效率低下的问题,所以在性能方面比RN更高一筹。个人觉得Dart简单易用,即有脚本语言的易用特性,又有高级语言的强大功能。
10Q:请问 Flutter 与 ReactNative 比较,有哪些优势和差异,在技术入门学习成本和开发组件的丰富方面目前是怎样的状态?谢谢!
A:Flutter组件已经很丰富了,能满足大部分的应用场景,唯一需要做的是,有特定需求需要开发插件,类似rn plugincorodva plugin。技术的学习成本不高,Dart语言很容易上手。建议可以尝试一下。
11Q:有没有Flutter音视频相关的项目案例?
A:可以关注我们团队的flutter webrtc项目:https://github.com/cloudwebrtc/flutter-webrtc
12Q:关于对android和iOS的兼容性问题,有什么需要注意的?
A:基本上写一套界面,在两个平台上展现一致,我遇到过iPhoneX下底部显示被遮挡的问题。
13Q:其实现在的跨平台开发还是Qt c++那套比较实用,性能可以保证,很多游戏前端都是c++跨,UI并不高深。不知道这个Flutter性能和持久性如何?
A:win是dart + c++, macOS是dart + oc,性能自然有保障,性能能达到60fps。QT个人觉得相比较于Flutter开发太慢,组件也麻烦。
14Q:Flutter对自定义组件的开发友好度怎么样?谢谢
A:比较方便,继承StatelessWidget/StatefulWidget然后重写Widget build(BuildContext context)方法,即可自定义组件。
15Q:我看了几个性能的测评贴,包括rn,原生,flutter,但是发现不同的博主给出的结论竟然截然相反,让我非常的诧异,有没有比较官方的性能比较?由于带环境,安装包大小最为诟病,未来有可能精简么?谢谢
A:底层渲染都是基于skia C++ 的2D绘图引擎,调用GPU来完成渲染。性能不可能差的。默认打包出来的尺寸30m左右,个人觉得不算大。
17Q:Flutter的原理和我最初设想的跨平台方案一样,就是用view来绘制控件,这样能最大程度发挥性能,但也意味着要有很长的路要走,请问现在安卓平台和ios平台用Flutter开发的话,需要调用原生的东西多不多?另外除了学习Dart语言外还有什么周边的东西需要学习的吗?
A:调用原生的程序,根据应用求而定,比如需要打开手机摄像头就需要。Flutter学习主要是要熟悉Dart语法,还有各种组件的使用。可以看我的博客https://blog.csdn.net/kangshaojun888/里面有大量组件的使用示例。
18Q:我比较关心Flutter与国内一些第三方的集成,比如微信、微博登录和分享,微信、支付宝支付、以及百度地图或是高德地图。在国内开发应用少不了这些集成,是否有成熟的插件可以使用,如果没有应该如何与这些第三方的Native SDK 做集成?成本如何?谢谢。
A:有一些集成已经有了,比如支付相关。第三方集成的项目正在增长。想做集成需要开发Flutter插件,上手容易,个人认为成本不高。只需要做Dart与native的衔接即可。如何编写插件可以了解一下我的github开源项目 https://github.com/kangshaojun。或者看这篇文章http://flutter100.net/docs/plugin_battery_manager.html
---------------------------------------------
亢少军老师编写的国内首本Flutter相关书籍,《Flutter技术入门与实战》现已上线!从实战角度讲解Flutter,从基础组件到综合案例,从工具使用到插件开发,包含大量精选案例和详细实操步骤,还有配套视频课程可帮助读者快速入门。