发表日期:2018-12 文章编辑:小灯 浏览次数:4125
Flutter在12月5号发布了最新的稳定版本1.0,象征着Flutter新技术提上了征程,期待着他能靠一己之力改变移动端开的格局!
Flutter1.0官方推文
以下为正文,推荐官网APIFlutter,如果觉l得英文看着费劲[Flutter中文网(https://flutterchina.club/),但是其更新速度比官网慢一下,我在写的时候还没有更新到1.0版本。
移动端至少分为3大格局,Android开发,iOS开发和React Native开发。React Native将iOS和Android的开发平台相互融合通过js解释器构建,完成开发一次,两端都能使用的技术方案。但是React Native技术是FaceBook开发的,抛开技术性问题不谈,其开源类型非BSD项目,FaceBook还是对其拥有控制权,所以大公司都摒弃了React native的开发。(具体协议可自行查看)。
Flutter是谷歌的移动UI框架,可以快速在iOS和Android上构建高质量的原生用户界面。 Flutter可以与现有的代码一起工作。在全世界,Flutter正在被越来越多的开发者和组织使用,并且Flutter是完全免费、开源的。(除非特别说明,其开源协议是BSD模式)
(笔者为android开发,只细谈安卓方向)
Android studio 、IDE、VS Code等任何编辑器
Flutter与用于构建移动应用程序的其他大多数框架不同,因为Flutter既不使用WebView,也不使用操作系统的原生控件。相反,Flutter使用自己的高性能渲染引擎来绘制界面
Flutter架构层级.pngFlutter中使用轻量的C++构建底层,使用Dart语言开发编译,使用Skia 2D渲染引擎渲染自己的weight控件。
简单的可以理解为view,整个Flutter应用都是使用的widget树构建UI,在构建过程中使用不同的widget控间嵌套来实现界面。
1).StatelessWidget
没有状态的组建,StatelessWidget创建一次,永远不会改变其外观,在build中搭建widget树布局。
2).StatefulWidget
根据收到的数据或yoghurt输入动态更改状态,creatState中创建一个State对象,而其State对象存在生命周期,可以进行setState操作动态更新界面的显示。
State存在生命周期如下:
state生命周期.png其中reassemble:是在开发中的热更新才会调用的生命周期,这是与rn不同的地方。
使用http请求,调用dio第三方库获取数据渲染到界面中,使用async await返回Future对象。
Android中:
public class FlutterToNative implements MethodChannel.MethodCallHandler { public static String NAME = "com.kang.economicanalysis/plugin"; private Activity activity;FlutterToNative(Activity activity){ this.activity = activity; }public static void registerWidth(PluginRegistry.Registrar registrar){ MethodChannel channel = new MethodChannel(registrar.messenger(), NAME); FlutterToNative instance = new FlutterToNative(registrar.activity()); //setMethodCallHandler在此通道上接收方法调用的回调 channel.setMethodCallHandler(instance); }@Override public void onMethodCall(MethodCall methodCall, MethodChannel.Result result) { //通过MethodCall可以获取参数和方法名,然后再寻找对应的平台业务,本案例做了2个跳转的业务//接收来自flutter的指令oneAct if (methodCall.method.equals("ToOne123")) {//跳转到指定Activity Intent intent = new Intent(activity, OneActivity.class); activity.startActivity(intent);//返回给flutter的参数 result.success("success"); } //接收来自flutter的指令twoAct else if (methodCall.method.equals("ToOne")) {//解析参数 String text = methodCall.argument("flutter");//带参数跳转到指定Activity Intent intent = new Intent(activity, OneActivity.class); intent.putExtra("flutter", text); activity.startActivity(intent);//返回给flutter的参数 result.success("从原生传回来的参数"); } else { result.notImplemented(); } } }
在MainActivity中进行调用:
public class MainActivity extends FlutterActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); GeneratedPluginRegistrant.registerWith(this); //交互 FlutterToNative.registerWidth(registrarFor(FlutterToNative.NAME)); } }
flutter代码中:
//获取到插件与原生的交互通道 static const jumpPlugin = const MethodChannel('com.kang.economicanalysis/plugin');
//原生交互传递值,获取返回值SetState更新到UI中 Future<Null> _ToNative() async { Map<String, String> map = { "flutter": "flutter" }; String result = await jumpPlugin.invokeMethod('ToOne', map); setState(() { _data = result; }); }
这样就结束了!
在Flutter中使用的是通道的方式构建与原声的交互,通道建立完毕后随时调用,随时通信,还可以使用这种方式拓展控件,例如:flutter不支持webview,可以使用Android原生的webview通过addContentView(),添加到Flutter使用。flutter-webview
React Native使用js语言开发,形式模仿React框架,执行需要js解释器,UI通过原生控件渲染。
Flutter直接使用原生的canvas,在其自带的Skia 2D引擎上渲染UI,不通过间接转换,节省时间
1.开发差异:
2.友好性:
3.控件影响
4.效率:
5.动态化:
6.App体积:
7.平板适配性:
8.兼容性:
9.稳定性:
日期:2018-10 浏览次数:7120
日期:2018-12 浏览次数:4184
日期:2018-07 浏览次数:4739
日期:2018-12 浏览次数:4031
日期:2018-09 浏览次数:5363
日期:2018-12 浏览次数:9782
日期:2018-11 浏览次数:4681
日期:2018-07 浏览次数:4452
日期:2018-05 浏览次数:4731
日期:2018-12 浏览次数:4186
日期:2018-10 浏览次数:5005
日期:2018-12 浏览次数:6079
日期:2018-11 浏览次数:4326
日期:2018-08 浏览次数:4443
日期:2018-11 浏览次数:12467
日期:2018-09 浏览次数:5436
日期:2018-12 浏览次数:4706
日期:2018-10 浏览次数:4048
日期:2018-11 浏览次数:4398
日期:2018-12 浏览次数:5927
日期:2018-06 浏览次数:3869
日期:2018-08 浏览次数:5310
日期:2018-10 浏览次数:4336
日期:2018-12 浏览次数:4344
日期:2018-07 浏览次数:4225
日期:2018-12 浏览次数:4375
日期:2018-06 浏览次数:4254
日期:2018-11 浏览次数:4232
日期:2018-12 浏览次数:4124
日期:2018-12 浏览次数:5139
Copyright ? 2013-2018 Tadeng NetWork Technology Co., LTD. All Rights Reserved.