為您解碼網(wǎng)站建設(shè)的點(diǎn)點(diǎn)滴滴
發(fā)表日期:2018-12 文章編輯:小燈 瀏覽次數(shù):4380
Flutter在12月5號(hào)發(fā)布了最新的穩(wěn)定版本1.0,象征著Flutter新技術(shù)提上了征程,期待著他能靠一己之力改變移動(dòng)端開的格局!
Flutter1.0官方推文
以下為正文,推薦官網(wǎng)APIFlutter,如果覺l得英文看著費(fèi)勁[Flutter中文網(wǎng)(https://flutterchina.club/),但是其更新速度比官網(wǎng)慢一下,我在寫的時(shí)候還沒有更新到1.0版本。
移動(dòng)端至少分為3大格局,Android開發(fā),iOS開發(fā)和React Native開發(fā)。React Native將iOS和Android的開發(fā)平臺(tái)相互融合通過js解釋器構(gòu)建,完成開發(fā)一次,兩端都能使用的技術(shù)方案。但是React Native技術(shù)是FaceBook開發(fā)的,拋開技術(shù)性問題不談,其開源類型非BSD項(xiàng)目,F(xiàn)aceBook還是對(duì)其擁有控制權(quán),所以大公司都摒棄了React native的開發(fā)。(具體協(xié)議可自行查看)。
Flutter是谷歌的移動(dòng)UI框架,可以快速在iOS和Android上構(gòu)建高質(zhì)量的原生用戶界面。 Flutter可以與現(xiàn)有的代碼一起工作。在全世界,F(xiàn)lutter正在被越來越多的開發(fā)者和組織使用,并且Flutter是完全免費(fèi)、開源的。(除非特別說明,其開源協(xié)議是BSD模式)
(筆者為android開發(fā),只細(xì)談安卓方向)
Android studio 、IDE、VS Code等任何編輯器
Flutter與用于構(gòu)建移動(dòng)應(yīng)用程序的其他大多數(shù)框架不同,因?yàn)镕lutter既不使用WebView,也不使用操作系統(tǒng)的原生控件。相反,F(xiàn)lutter使用自己的高性能渲染引擎來繪制界面
Flutter中使用輕量的C++構(gòu)建底層,使用Dart語言開發(fā)編譯,使用Skia 2D渲染引擎渲染自己的weight控件。
簡單的可以理解為view,整個(gè)Flutter應(yīng)用都是使用的widget樹構(gòu)建UI,在構(gòu)建過程中使用不同的widget控間嵌套來實(shí)現(xiàn)界面。
1).StatelessWidget
沒有狀態(tài)的組建,StatelessWidget創(chuàng)建一次,永遠(yuǎn)不會(huì)改變其外觀,在build中搭建widget樹布局。
2).StatefulWidget
根據(jù)收到的數(shù)據(jù)或yoghurt輸入動(dòng)態(tài)更改狀態(tài),creatState中創(chuàng)建一個(gè)State對(duì)象,而其State對(duì)象存在生命周期,可以進(jìn)行setState操作動(dòng)態(tài)更新界面的顯示。
State存在生命周期如下:
其中reassemble:是在開發(fā)中的熱更新才會(huì)調(diào)用的生命周期,這是與rn不同的地方。
使用http請(qǐng)求,調(diào)用dio第三方庫獲取數(shù)據(jù)渲染到界面中,使用async await返回Future對(duì)象。
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在此通道上接收方法調(diào)用的回調(diào) channel.setMethodCallHandler(instance); }@Override public void onMethodCall(MethodCall methodCall, MethodChannel.Result result) { //通過MethodCall可以獲取參數(shù)和方法名,然后再尋找對(duì)應(yīng)的平臺(tái)業(yè)務(wù),本案例做了2個(gè)跳轉(zhuǎn)的業(yè)務(wù)//接收來自flutter的指令oneAct if (methodCall.method.equals("ToOne123")) {//跳轉(zhuǎn)到指定Activity Intent intent = new Intent(activity, OneActivity.class); activity.startActivity(intent);//返回給flutter的參數(shù) result.success("success"); } //接收來自flutter的指令twoAct else if (methodCall.method.equals("ToOne")) {//解析參數(shù) String text = methodCall.argument("flutter");//帶參數(shù)跳轉(zhuǎn)到指定Activity Intent intent = new Intent(activity, OneActivity.class); intent.putExtra("flutter", text); activity.startActivity(intent);//返回給flutter的參數(shù) result.success("從原生傳回來的參數(shù)"); } else { result.notImplemented(); } } }
在MainActivity中進(jìn)行調(diào)用:
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; }); }
這樣就結(jié)束了!
在Flutter中使用的是通道的方式構(gòu)建與原聲的交互,通道建立完畢后隨時(shí)調(diào)用,隨時(shí)通信,還可以使用這種方式拓展控件,例如:flutter不支持webview,可以使用Android原生的webview通過addContentView(),添加到Flutter使用。flutter-webview
React Native使用js語言開發(fā),形式模仿React框架,執(zhí)行需要js解釋器,UI通過原生控件渲染。
Flutter直接使用原生的canvas,在其自帶的Skia 2D引擎上渲染UI,不通過間接轉(zhuǎn)換,節(jié)省時(shí)間
1.開發(fā)差異:
2.友好性:
3.控件影響
4.效率:
5.動(dòng)態(tài)化:
6.App體積:
7.平板適配性:
8.兼容性:
9.穩(wěn)定性:
日期:2018-10 瀏覽次數(shù):7393
日期:2018-12 瀏覽次數(shù):4465
日期:2018-07 瀏覽次數(shù):4996
日期:2018-12 瀏覽次數(shù):4295
日期:2018-09 瀏覽次數(shù):5634
日期:2018-12 瀏覽次數(shù):10042
日期:2018-11 瀏覽次數(shù):4939
日期:2018-07 瀏覽次數(shù):4708
日期:2018-05 瀏覽次數(shù):4982
日期:2018-12 瀏覽次數(shù):4438
日期:2018-10 瀏覽次數(shù):5261
日期:2018-12 瀏覽次數(shù):6335
日期:2018-11 瀏覽次數(shù):4589
日期:2018-08 瀏覽次數(shù):4715
日期:2018-11 瀏覽次數(shù):12793
日期:2018-09 瀏覽次數(shù):5710
日期:2018-12 瀏覽次數(shù):4959
日期:2018-10 瀏覽次數(shù):4304
日期:2018-11 瀏覽次數(shù):4653
日期:2018-12 瀏覽次數(shù):6181
日期:2018-06 瀏覽次數(shù):4126
日期:2018-08 瀏覽次數(shù):5570
日期:2018-10 瀏覽次數(shù):4578
日期:2018-12 瀏覽次數(shù):4657
日期:2018-07 瀏覽次數(shù):4485
日期:2018-12 瀏覽次數(shù):4634
日期:2018-06 瀏覽次數(shù):4510
日期:2018-11 瀏覽次數(shù):4491
日期:2018-12 瀏覽次數(shù):4379
日期:2018-12 瀏覽次數(shù):5391
Copyright ? 2013-2018 Tadeng NetWork Technology Co., LTD. All Rights Reserved.