bl双性强迫侵犯h_国产在线观看人成激情视频_蜜芽188_被诱拐的少孩全彩啪啪漫画

flutter調用,Flutter調用android原生頁面

Flutter初始化

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

員工經過長期磨合與沉淀,具備了協作精神,得以通過團隊的力量開發出優質的產品。創新互聯堅持“專注、創新、易用”的產品理念,因為“專注所以專業、創新互聯網站所以易用所以簡單”。公司專注于為企業提供網站建設、成都做網站、微信公眾號開發、電商網站開發,重慶小程序開發公司,軟件專業公司等一站式互聯網企業服務。

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

2,Application配置FlutterApplication。

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

調用FlutterMain.startInitialization()方法。

initConfig方法,從AndroidManfest.xml配置的applicaion節點獲取meta-data數據,初始化以下默認值。

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

initResources方法, 初始化資源。

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

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

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

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

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

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

組件啟動,onCreate方法。

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

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

調用FlutterView的runFromBundle方法,入口點在dart的main方法,

通過FlutterNativeView,調用FlutterJNI的native方法。

nativeRunBundleAndSnapshotFromLibrary方法。

任重而道遠

Flutter中InheritedWidget的使用

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

Flutter的響應式開發與React類似,數據都是自頂向下的。

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

大體意思如下:

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

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

在 InheritedWidget 類型的控件被引用,也就是調用過 inheritFromWidgetOfExactType 方法后,當 InheritedWidget 自身狀態改變時,會導致引用了 InheritedWidget 類型的子控件重構(rebuild)。

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

創建一個類繼承 InheritedWidget,并實現 updateShouldNotify 方法。

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

1.定義數據模型

這里隨便定義一個 Person 類。

2.自定義 InheritedWidget 控件類

創建一個類繼承 InheritedWidget,并實現 updateShouldNotify 方法。

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

3.InheriedDataWidget 的使用

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

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

WidgetA1_1 類

WidgetA1_2 類

WidgetA1_3 類

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

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

把 WidgetB 和 WidgetA 保持同一節點

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

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

以上就是有關InheritedWidget的使用。

自己也是從事Android開發5年有余了;整理了一些Android開發技術核心筆記和面經題綱,有關更多Android開發進階技術資料、面經題綱、核心技術筆記; 想要進階自己、拿高薪的同學請私信我回復“核心筆記”或“面試”領取!

Flutter筆記-調用原生IOS高德地圖sdk

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

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

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

1、info.plist文件設置

2、 ios 端實現原生組件PlatformView提供原生view

3 、ios 端創建PlatformViewFactory用于生成PlatformView

4、 ios 端創建FlutterPlugin用于注冊原生組件

5 、flutter 平臺嵌入 原生view

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

創建類 FlutterMapView 并實現FlutterPlatformView 協議

FlutterMapView.h

FlutterMapView.m

FlutterMapFactory.h

FlutterMapFactory.m

FlutterMapPlugin.h

FlutterMapPlugin.m

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

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

地圖依賴的庫列舉如下:

基礎 SDK AMapFoundationKit.framework

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

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

3D地圖正確配置應如下圖所示:

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

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

成功跑起來 。。 。

flutter 同時執行多個異步請求回調

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

調用方式如下:

Flutter.2.Flutter與OC的雙向調用

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

當flutter需要用到的時候執行 invokeMethod ,

invokeMethod 帶兩個參數.

分享標題:flutter調用,Flutter調用android原生頁面
本文網址:http://vcdvsql.cn/article34/dsdjspe.html

成都網站建設公司_創新互聯,為您提供網站排名自適應網站搜索引擎優化Google定制開發

廣告

聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯

營銷型網站建設