1. <ul id="0c1fb"></ul>

      <noscript id="0c1fb"><video id="0c1fb"></video></noscript>
      <noscript id="0c1fb"><listing id="0c1fb"><thead id="0c1fb"></thead></listing></noscript>

      99热在线精品一区二区三区_国产伦精品一区二区三区女破破_亚洲一区二区三区无码_精品国产欧美日韩另类一区

      RELATEED CONSULTING
      相關(guān)咨詢
      選擇下列產(chǎn)品馬上在線溝通
      服務(wù)時間:8:30-17:00
      你可能遇到了下面的問題
      關(guān)閉右側(cè)工具欄

      新聞中心

      這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
      flutter調(diào)用,Flutter調(diào)用android原生頁面

      Flutter初始化

      新建一個Flutter工程,android模塊。

      員工經(jīng)過長期磨合與沉淀,具備了協(xié)作精神,得以通過團(tuán)隊的力量開發(fā)出優(yōu)質(zhì)的產(chǎn)品。創(chuàng)新互聯(lián)堅持“專注、創(chuàng)新、易用”的產(chǎn)品理念,因為“專注所以專業(yè)、創(chuàng)新互聯(lián)網(wǎng)站所以易用所以簡單”。公司專注于為企業(yè)提供網(wǎng)站建設(shè)、成都做網(wǎng)站、微信公眾號開發(fā)、電商網(wǎng)站開發(fā),重慶小程序開發(fā)公司,軟件專業(yè)公司等一站式互聯(lián)網(wǎng)企業(yè)服務(wù)。

      1,只有一個Activity組件,它是Dart層繪制Widget的容器。

      2,Application配置FlutterApplication。

      應(yīng)用Application配置io.flutter.app.FlutterApplication類,App首次啟動時,初始化。

      調(diào)用FlutterMain.startInitialization()方法。

      initConfig方法,從AndroidManfest.xml配置的applicaion節(jié)點獲取meta-data數(shù)據(jù),初始化以下默認(rèn)值。

      這些值都是使用中用到的name,例如,抽取apk中asset資源時,flutter_assets打包目錄,打包產(chǎn)物data名稱。

      initResources方法, 初始化資源。

      在Flutter打包apk的asset目錄下,包括fluttter_asset目錄/資源項,將資源從apk中抽取,保存在 Context.getDir("flutter", 0) 目錄下。

      /data/user/0/包名/app_flutter目錄。

      在目錄中創(chuàng)建一個時間戳文件,根據(jù)apk版本和包信息記錄的lastUpdateTime更新時間,第二次啟動時,若apk未更新,不需要再次抽取。

      加載so庫,libflutter.so,System.loadLibrary()。

      主頁面繼承FlutterActivity,配置啟動模式singleTop。

      FlutterActivity類在io.flutter.app包, (區(qū)別io.flutter.embedding.android包), 組件生命周期委托給FlutterActivityDelegate類。

      組件啟動,onCreate方法。

      FlutterMain.ensureInitializationComplete方法,確保資源成功抽取完成,創(chuàng)建FlutterView視圖(io.flutter.view),繼承SurfaceView類,setContentView方法,設(shè)置組件主布局即FlutterView視圖。

      最后,根據(jù)Bundle路徑,runBundle()加載運行,

      調(diào)用FlutterView的runFromBundle方法,入口點在dart的main方法,

      通過FlutterNativeView,調(diào)用FlutterJNI的native方法。

      nativeRunBundleAndSnapshotFromLibrary方法。

      任重而道遠(yuǎn)

      Flutter中InheritedWidget的使用

      在Tree中從上往下高效傳遞數(shù)據(jù)的基類widget , 定義為:abstract class InheritedWidget extends ProxyWidget

      Flutter的響應(yīng)式開發(fā)與React類似,數(shù)據(jù)都是自頂向下的。

      假設(shè)有祖先組點A,中間經(jīng)過結(jié)點B, C,然后到結(jié)點D,D需要從A中獲取數(shù)據(jù)f,那按照自頂向下數(shù)據(jù)流轉(zhuǎn),f需要依次傳遞給B及C,最后才到C。這樣開發(fā)極為不靈活,成本也比較高。所有Flutter需要有跨結(jié)點(只能是祖先后代節(jié)點,不能跨兄弟節(jié)點)高效傳遞數(shù)據(jù)的方案。

      大體意思如下:

      InheritedWidget 是在樹中高效向下傳遞信息的基類部件;

      調(diào)用[BuildContext.inheritFromWidgetOfExactType]方法可以從 BuildContext 中獲取到最近的 InheritedWidget 類型的實例;

      在 InheritedWidget 類型的控件被引用,也就是調(diào)用過 inheritFromWidgetOfExactType 方法后,當(dāng) InheritedWidget 自身狀態(tài)改變時,會導(dǎo)致引用了 InheritedWidget 類型的子控件重構(gòu)(rebuild)。

      這里隨便定義一個人 Person 類。

      創(chuàng)建一個類繼承 InheritedWidget,并實現(xiàn) updateShouldNotify 方法。

      之前說到調(diào)用[BuildContext.inheritFromWidgetOfExactType]方法可以從 BuildContext 中獲取到最近的 InheritedWidget 類型的實例,所以此處定義一個靜態(tài)的 of 方法,通過傳入的 context 獲取到最近的 InheriedDataWidget 實例。

      1.定義數(shù)據(jù)模型

      這里隨便定義一個 Person 類。

      2.自定義 InheritedWidget 控件類

      創(chuàng)建一個類繼承 InheritedWidget,并實現(xiàn) updateShouldNotify 方法。

      之前說到調(diào)用[BuildContext.inheritFromWidgetOfExactType]方法可以從 BuildContext 中獲取到最近的 InheritedWidget 類型的實例,所以此處定義一個靜態(tài)的 of 方法,通過傳入的 context 獲取到最近的 InheriedDataWidget 實例。

      3.InheriedDataWidget 的使用

      InheriedDataWidget 使用起來也很簡單,它本身也是一個控件,只要在任意一個頁面的子控件調(diào)用其構(gòu)造方法就行,這里我們定義一個形如的 Widget 樹。

      WidgetA 是一個 StatefulWidget 類型的控件,可以調(diào)用 setState 刷新,如果是繼承人 Stateless 類型的控件,那我們也可以通過 Stream 或者其他方式刷新數(shù)據(jù),感興趣的請看[什么是 Stream? Dart

      WidgetA1_1 類

      WidgetA1_2 類

      WidgetA1_3 類

      當(dāng)我們點擊 floatingActionButton 的時候,WidgetA1, WidgetA1_1, WidgetA1_2 的控件都會更新 Person 的信息,而且每點 floatingActionButton 一次, 當(dāng)我們點擊 floatingActionButton 的時候,WidgetA1, WidgetA1_1, WidgetA1_2 的控件都會更新 Person 的信息,而且每點 floatingActionButton 一次,都會輸出:

      如果我們試圖在和 WidgetA 的同一層級的兄弟節(jié)點去訪問 InheriedDataWidget 的 Person 數(shù)據(jù),是不行的,因為父節(jié)點中并沒有插入 InheriedDataWidget。

      把 WidgetB 和 WidgetA 保持同一節(jié)點

      這也體現(xiàn)了 Inheried(遺傳) 這一單詞的特性,遺傳只存在于父子。兄弟不存在遺傳的關(guān)系。

      這種數(shù)據(jù)共享的方式在某些場景還是很有用的,就比如說全局主題,字體大小,字體顏色的變更,只要在 App 根層級共享出這些配置數(shù)據(jù),然后在觸發(fā)數(shù)據(jù)改變之后,所有引用到這些共享數(shù)據(jù)的地方都會刷新,這換主題,字體是不是就很輕松,事實上 Theme.of(context).primaryColor 之流就是這么干的。

      以上就是有關(guān)InheritedWidget的使用。

      自己也是從事Android開發(fā)5年有余了;整理了一些Android開發(fā)技術(shù)核心筆記和面經(jīng)題綱,有關(guān)更多Android開發(fā)進(jìn)階技術(shù)資料、面經(jīng)題綱、核心技術(shù)筆記; 想要進(jìn)階自己、拿高薪的同學(xué)請私信我回復(fù)“核心筆記”或“面試”領(lǐng)取!

      Flutter筆記-調(diào)用原生IOS高德地圖sdk

      2017年底因公司業(yè)務(wù)組合部門調(diào)整,新的團(tuán)隊部分維護(hù)的項目用React Native技術(shù)混合開發(fā)。為適應(yīng)環(huán)境變化,開啟瘋狂RN學(xué)習(xí)之旅,晚上回來啃資料看視頻。可能由于本身對RN技術(shù)體驗不感冒或者在環(huán)境之下強迫學(xué)習(xí)有點不爽。開始尋找代替方案,F(xiàn)luter像一束曙光引起了我的注意,之后一直關(guān)注并利用閑余時間開始探索。2018年一直學(xué)習(xí)到使用Flutter寫項目,從0.2.0開始到現(xiàn)在1.5版本的發(fā)布,終于開始慢慢的爬出坑位了,但是因為部分控件感覺還是不如原生控件好用,因而Flutter提供了PlatformView部件。近期因項目中嚴(yán)重使用依賴地圖,故而做了Fluterr使用原生IOS高德地圖調(diào)研。因為我本身是一名android開發(fā)人員,初學(xué)IOS并記錄下來。

      PlatformView是 flutter 官方提供的一個可以嵌入 Android 和 iOS 平臺原生 view 的小部件。

      在我們實際開發(fā)中,我們遇到一些 flutter 官方?jīng)]有提供的插件可以自己創(chuàng)建編寫插件來實現(xiàn)部分功能,但是原生View在 flutter 中會遮擋住flutter 中的小部件,比如你想使用高德地圖sdk、視頻播放器、直播等原生控件,就無法很好的與 flutter 項目結(jié)合。

      1、info.plist文件設(shè)置

      2、 ios 端實現(xiàn)原生組件PlatformView提供原生view

      3 、ios 端創(chuàng)建PlatformViewFactory用于生成PlatformView

      4、 ios 端創(chuàng)建FlutterPlugin用于注冊原生組件

      5 、flutter 平臺嵌入 原生view

      iOS端的UiKitView目前還只是preview狀態(tài), 默認(rèn)是不支持的, 需要手動打開開關(guān), 在info.plist文件中新增一行io.flutter.embedded_views_preview為true.

      創(chuàng)建類 FlutterMapView 并實現(xiàn)FlutterPlatformView 協(xié)議

      FlutterMapView.h

      FlutterMapView.m

      FlutterMapFactory.h

      FlutterMapFactory.m

      FlutterMapPlugin.h

      FlutterMapPlugin.m

      請前往 高德開放平臺控制臺 申請 iOS Key。

      注意:Bundle Identifier需要與申請的時候填寫的一致

      地圖依賴的庫列舉如下:

      基礎(chǔ) SDK AMapFoundationKit.framework

      第一步:將解壓后的MAMapKit.framework 文件 copy 或 拖拽 到工程文件夾中,左側(cè)目錄選中工程名,在 TARGETS-Build Phases- Link Binary With Libaries 中點擊“+”按鈕,在彈出的窗口中點擊“Add Other”按鈕,選擇工程目錄下的 MAMapKit.framework 文件添加到工程中。

      千萬不要忘記將AMapFoundationKit也一起加入工程。

      3D地圖正確配置應(yīng)如下圖所示:

      需要引入的資源文件包括:AMap.bundle,其中:AMap.bundle 在 MAMapKit.framework 包中,AMap.bundle資源文件中存儲了定位、默認(rèn)大頭針標(biāo)注視圖等圖片,可利用這些資源圖片進(jìn)行開發(fā)。

      左側(cè)目錄中選中工程名,在右鍵菜單中選擇Add Files to “工程名”…,從MAMapKit.framework中選擇AMap.bundle文件,并勾選“Copy items if needed”復(fù)選框,單擊“Add”按鈕,將資源文件添加到工程中。

      成功跑起來 。。 。

      flutter 同時執(zhí)行多個異步請求回調(diào)

      flutter中提供了Future.wait()函數(shù),可以在執(zhí)行多個異步請求之后有一個統(tǒng)一的回調(diào)結(jié)果,但是劣勢在于,每一個異步函數(shù)的函數(shù)體中都需要執(zhí)行return去返回結(jié)果,如果在異步請求中,有多層success或者fail這種函數(shù)的嵌套,那么可能會在某個地方忽略掉retrun,導(dǎo)致沒有辦法拿到正確的結(jié)果。所以這里封裝了一個類似于js中Promise中的類去執(zhí)行多個異步請求。

      調(diào)用方式如下:

      Flutter.2.Flutter與OC的雙向調(diào)用

      mrliuys.flutter.io/channel 這個是自由定義,且是全局唯一的,

      當(dāng)flutter需要用到的時候執(zhí)行 invokeMethod ,

      invokeMethod 帶兩個參數(shù).


      新聞標(biāo)題:flutter調(diào)用,Flutter調(diào)用android原生頁面
      文章鏈接:http://www.ef60e0e.cn/article/dsdjspe.html
      99热在线精品一区二区三区_国产伦精品一区二区三区女破破_亚洲一区二区三区无码_精品国产欧美日韩另类一区
      1. <ul id="0c1fb"></ul>

        <noscript id="0c1fb"><video id="0c1fb"></video></noscript>
        <noscript id="0c1fb"><listing id="0c1fb"><thead id="0c1fb"></thead></listing></noscript>

        宾阳县| 彝良县| 开原市| 浦东新区| 安丘市| 黎城县| 仁寿县| 漾濞| 静乐县| 鄂尔多斯市| 长葛市| 黄浦区| 于田县| 偏关县| 洪湖市| 平度市| 水城县| 松溪县| 普兰县| 姚安县| 隆尧县| 工布江达县| 彝良县| 河南省| 张家港市| 九江市| SHOW| 南江县| 安福县| 工布江达县| 湘潭县| 陇川县| 奉化市| 文水县| 龙里县| 三门峡市| 泗水县| 精河县| 普定县| 个旧市| 凌云县|