欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

安卓12flutter,安卓軟件下載網(wǎng)

flutter 升級(jí)適配 android12

In gradle-wapper.property:

創(chuàng)新互聯(lián)是一家專注于成都網(wǎng)站建設(shè)、成都做網(wǎng)站與策劃設(shè)計(jì),孝昌網(wǎng)站建設(shè)哪家好?創(chuàng)新互聯(lián)做網(wǎng)站,專注于網(wǎng)站建設(shè)十年,網(wǎng)設(shè)計(jì)領(lǐng)域的專業(yè)建站公司;建站業(yè)務(wù)涵蓋:孝昌等地區(qū)。孝昌做網(wǎng)站價(jià)格咨詢:18982081108

" distributionUrl=https\://services.gradle.org/distributions/gradle-7.3.3-all.zip"

in build.gradle:

???dependencies{

?? classpath'com.android.tools.build:gradle:7.2.1'

?? classpath"org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"

}

參照:;authuser=0#updating-gradle

四大組件中添加?android:exported="true"

Flutter(六)Android與Flutter混合開發(fā)(Hybird)

如果我們目前的項(xiàng)目是Android的,但是接下來我們希望部分頁(yè)面可以使用Flutter進(jìn)行開發(fā),甚至我們希望在Native頁(yè)面中嵌入FlutterUI組件,那么我們?cè)撊绾螌?shí)現(xiàn)呢?

假設(shè)你現(xiàn)在Android項(xiàng)目的目錄的結(jié)構(gòu)是這樣的

這時(shí)候如果你想創(chuàng)建一個(gè)Flutter模塊,使得Android模塊和Flutter模塊之間可以進(jìn)行交互,我們可以通過Android Studio新建一個(gè)Flutter Module,具體過程是:File — New — New Module ,之后選擇Flutter Module,指定Project Location的路徑為

也就是說,最終你的項(xiàng)目結(jié)構(gòu)會(huì)是這樣的

接下來在Android Module的 build.gradle 文件中添加flutter依賴

先創(chuàng)建一個(gè)Flutter頁(yè)面

這里比較重要的是 window.defaultRouteName 這個(gè)字段,這個(gè)字段可以接收從Native傳遞過來的參數(shù) (下文我們會(huì)介紹原生傳遞參數(shù)的方法),也就是說通過這個(gè)字段我們就可以進(jìn)行Flutter頁(yè)面的路由的分發(fā)

我們可以直接在Android的 MainActivity 中啟動(dòng)一個(gè) FlutterActivity ,這里的 initialRoute 方法中傳遞的參數(shù)就對(duì)應(yīng)Flutter層的 window.defaultRouteName

注意:需要在 AndroidManifest.xml 注冊(cè) FlutterActivity

自己創(chuàng)建一個(gè) FlutterAppActivity 繼承自 FlutterActivity

在 MainActivity 中啟動(dòng) FlutterAppActivity (另外別忘了在 AndroidManifest.xml 中注冊(cè) FlutterAppActivity )

兩種啟動(dòng)方式的區(qū)別

如果單純只是想打開一個(gè)Flutter頁(yè)面,兩種方式實(shí)際上基本沒有太大區(qū)別,第一種方式也許還會(huì)更簡(jiǎn)單一點(diǎn)。但是,在Flutter開發(fā)中,我們往往還需要開發(fā)一些Native插件供Flutter調(diào)用,如果使用復(fù)寫 FlutterActivity 的方式更有利于我們?cè)?FlutterActivity 中注冊(cè)我們的Native插件,所以實(shí)際開發(fā)中一般推薦使用第二種方式

擴(kuò)展思考

initialRoute 從名稱上看起來是Flutter提供給我們進(jìn)行Native與Flutter交互的路由跳轉(zhuǎn)的,但是實(shí)際上他就是一個(gè)字符串,我們不僅僅可以傳遞一個(gè)路由名稱,有時(shí)候我們也可以通過這個(gè)參數(shù)傳遞一串JSON數(shù)據(jù),然后在Flutter端進(jìn)行解析,這樣我們就可以通過這個(gè)參數(shù)做更多的事情

activity_main.xml

FrameLayout 用于承載Flutter組件

MainActivity.java

使用 FragmentManager 將 FlutterFragment 添加到 FrameLayout 容器中

運(yùn)行結(jié)果

上半部分是原生的TextView,下半部分是Flutter的Text組件

本節(jié)主要介紹了Native和Flutter之間的頁(yè)面跳轉(zhuǎn),以及同一個(gè)頁(yè)面中Native與Flutter組件的組合。接下來會(huì)介紹如何編寫Android插件與Flutter進(jìn)行數(shù)據(jù)交互

Android原生和Flutter使用過程的差異對(duì)比(一)

1、界面搭建過程中各種大小單位

Android:通常采用dp設(shè)置View寬高(和px像素的換算關(guān)系是dp值 × density邏輯密度),sp設(shè)置字體大小(會(huì)隨著系統(tǒng)字體設(shè)置的大小而改變)。

Flutter:沒有具體的大小單位描述, 和尺寸相關(guān)的MediaQueryData類中較為重要的幾個(gè)值如下:

(一)devicePixelRatio(設(shè)備像素比),對(duì)應(yīng)Android中的density

(二)size.width和height,設(shè)備的邏輯像素寬高,并非絕對(duì)物理像素(例如iphone6的設(shè)備像素比是2,通過size獲取到的邏輯像素寬高為375 ?×? 667,實(shí)際物理像素則為750 × 1334,即分辨率)

(三)textScaleFactor:?jiǎn)挝贿壿嬒袼刈煮w像素?cái)?shù),默認(rèn)為1,設(shè)置成1.5則字體變大50%,如果想讓Text組件的字體大小不隨系統(tǒng)設(shè)置的變化而變化,需將這個(gè)值設(shè)定成固定值1

UI適配解決方案:

1、采用ScreenUtil插件,初始化時(shí)候傳入設(shè)計(jì)稿大小,當(dāng)發(fā)現(xiàn)一屏顯示的大小有差異時(shí)候采用插件提供的setWidth和setHeight來設(shè)置具體的寬高(會(huì)根據(jù)設(shè)計(jì)稿大小和實(shí)際設(shè)備邏輯像素寬高比進(jìn)行縮放)。

2、TextButton、Text等按鈕和文本組件,通過設(shè)置字體大小和內(nèi)邊距來控制整體的寬高,而非固定其寬高。

2、本地資源文件的引用方式

Android:圖片通常存放在res/mipmap或res/drawable下,不同分辨率對(duì)應(yīng)不同后綴名,如mipmap-hdpi、mipmap-xhdpi

Flutter:需在pubspec.yaml中配置,如下圖所示

如果只配置父級(jí)目錄例如(assets/images/common_status)則無法再存放不同尺寸的圖片。不同尺寸的圖片需建立對(duì)應(yīng)的2.0x、3.0x目錄后存放,設(shè)備在讀取時(shí)候會(huì)自行根據(jù)分辨率去找對(duì)應(yīng)的圖片,弊端是每有一張圖片就需在pubspec.yaml文件中聲明這些圖片

Android原生和Flutter使用過程的差異對(duì)比(二)

1、常用布局的對(duì)比

使用下來其他組件大致還算方便,但是相對(duì)布局而言使用便利程度上Android原生完勝,ConstraintLayout內(nèi)部的所有子View可以設(shè)置互相之間的位置依賴關(guān)系。

而Flutter的Stack組件內(nèi)部的Children只能通過外層包裹 Align后 固定位置,比如 Alignment.topLeft、Alignment.bottomRight 等。遇到復(fù)雜的堆疊布局需要通過外層包裹 Positioned 組件后設(shè)置固定的 top 和 left 距離以達(dá)到效果,內(nèi)部子組件之間無法設(shè)置位置關(guān)聯(lián)關(guān)系。

2、一些常用屬性設(shè)置上的差異:

Margin外邊距

Android:直接在布局文件對(duì)View設(shè)置android:layout_marginStart、android:layout_marginTop

Flutter:需嵌套 Container 組件并在內(nèi)部設(shè)置具體的 margin 值

Padding內(nèi)邊距

Android:TextView、ImageView、各種Layout都可以直接在屬性上設(shè)置android:paddingStart

Flutter:需嵌套 Padding 組件并在內(nèi)部設(shè)置具體的值

組件的可見性

Android:每個(gè)view都可以通過setVisibility來設(shè)置可見、隱藏或者隱藏但占位

Flutter:沒有單獨(dú)設(shè)置組件是否顯示的api,只能通過 bool 值控制是否添加該組件

事件監(jiān)聽

Android:常規(guī)的setOnClickListener和setOnLongClickListener設(shè)置單擊和長(zhǎng)按事件

Flutter:在需要添加事件監(jiān)聽的組件外層嵌套 InkWell 或 GestureDetector 并設(shè)置 onTap 等

3、生命周期

Android:

Activity和Fragment各自有完整的生命周期鏈路onCreate、onStart、onResume、onPause、onDestroy等

Flutter:

萬物皆組件,組件繼承 WidgetsBindingObserver 并重寫 didChangeAppLifecycleState 函數(shù)進(jìn)行監(jiān)聽

退回桌面依次執(zhí)行inactive 》= paused,此時(shí)界面不可見用戶不可操作,從桌面重新進(jìn)入app執(zhí)行resumed,狀態(tài)較少如需在某些條件下觸發(fā)特定操作可能要找別的方案,比如發(fā)通知之類的

Android Flutter 運(yùn)行報(bào)錯(cuò)

Flutter--Error: Cannot run with sound null safety, because the following dependencies don't support null safety

flutter sdk提示不是支持 null safety模式

解決方法

1:

在Android Studio中

Run -- Edit Configurations -- Add Additional Run args -- --no-sound-null-safety

2:

flutter run --no-sound-null-safety

flutter build apk --no-sound-null-safety

本文名稱:安卓12flutter,安卓軟件下載網(wǎng)
瀏覽地址:http://chinadenli.net/article8/dsiheip.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供Google云服務(wù)器服務(wù)器托管搜索引擎優(yōu)化網(wǎng)站維護(hù)軟件開發(fā)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

外貿(mào)網(wǎng)站制作