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

flutter離線開發(fā),flutter原生混合開發(fā)

Flutter自制工具之fluct助力Flutter快速開發(fā)神器

一個幫助開發(fā)Flutter應(yīng)用程序的工具

網(wǎng)站設(shè)計制作過程拒絕使用模板建站;使用PHP+MYSQL原生開發(fā)可交付網(wǎng)站源代碼;符合網(wǎng)站優(yōu)化排名的后臺管理系統(tǒng);成都網(wǎng)站設(shè)計、網(wǎng)站建設(shè)收費(fèi)合理;免費(fèi)進(jìn)行網(wǎng)站備案等企業(yè)網(wǎng)站建設(shè)一條龍服務(wù).我們是一家持續(xù)穩(wěn)定運(yùn)營了10多年的創(chuàng)新互聯(lián)網(wǎng)站建設(shè)公司。

.----------------------------------------------

| github地址:

|

| pub地址:

|

`----------------------------------------------

該工具無需添加到依賴項中,我們只需要 激活 即可,使用如下命令:

fluct 目前只有兩個命令 create 和 gen-assets

在 Flutter 開發(fā)過程中,我們創(chuàng)建文件是必須的,而AS自帶的創(chuàng)建文件,并沒有自動的生成相關(guān)的內(nèi)容,這會讓開發(fā)者非常的苦惱,類名還需要自己手動敲的話,而該命令,直接可以一步到位。

當(dāng)運(yùn)行此命令后,命令行會輸出以下內(nèi)容

可以看到,該命令輸出的內(nèi)容是簡單易懂的,我們來簡單使用一下吧。

創(chuàng)建 IndexPage 頁面,繼承自 StatefulWidget ,可以使用如下命令:

運(yùn)行成功之后,我們會在項目下找到 index_page.dart 文件,內(nèi)容為:

當(dāng)然,你也可以指定哪個文件夾,例如,我要在./lib/src/page 文件夾下創(chuàng)建 IndexPage ,使用如下命令

在開始之前,我們需要在項目根目錄下新建一個 fluct.yaml 文件,因為 fluct create -t custom 命令會找到它,內(nèi)容如下:

這里,我聲明了 inh 命令,然后運(yùn)行這個命令之后會在生成文件的時候添加 inh 對應(yīng)的內(nèi)容,內(nèi)容中我們值得注意的是 $NAME$ 占位符,該字符串會被替換成根據(jù)文件名生成的內(nèi)容,例如: index_page 會插入 IndexPage 到 $NAME$ 占位符中,最后,我們運(yùn)行以下命令:

運(yùn)行成功之后,我們能夠在根目錄下找到 index_inherited.dart 文件,內(nèi)容也是對應(yīng)的自定義內(nèi)容

我們在使用資源文件時,需要在 pubspec.yaml 文件聲明資源文件的路徑

例如:我在 ./assets/images 文件夾下添加 a.png 圖片,需要在 pubspec.yaml 文件下聲明

或者使用文件夾路徑

這一步如果文件多起來,很容易出現(xiàn)混亂,導(dǎo)致聲明麻煩,引用麻煩,并隨著項目的迭代,資源文件有些不用了,也不知道哪個是哪個,這個時候, fluct gen-assets 命令幫到你

當(dāng)運(yùn)行 fluct gen-assets -h 會輸出以下內(nèi)容

到此,你已經(jīng)擁有了自動資源綁定的功能了,輸入 fluct gen-assets 即可

所有的內(nèi)容都聲明好了, very good ~

有小伙伴可能會疑惑, fluct create 運(yùn)行之后會發(fā)現(xiàn)未找到命令,可能你使用了 flutter pub global activate fluct 命令激活,這個時候,我們可以使用 flutter pub run fluct create 運(yùn)行

Flutter插件開發(fā)

Flutter插件是Flutter調(diào)用原生能力的一種解構(gòu)方式。

Flutter 會通過 MethodChannel 將數(shù)據(jù)傳遞給 iOS/ Android ,反之 iOS/ Android 也可以通過 MethodChannel 將數(shù)據(jù)傳回給 Flutter。

在Flutter工程根目錄創(chuàng)建plugins目錄,在plugins目錄下執(zhí)行下面命令:

Flutter-Native

Native-Flutter

Flutter 開發(fā)筆記

下面這種情況下,為 InkWell 設(shè)置的 splashColor 不會生效:

需要用 Material 去除背景色,然后將顏色設(shè)置在 InkWell 外部:

在 Dialog builder 中使用 WillPopScope 禁用返回鍵返回:

注意:使用此方法同時也會禁用 iOS 上的手勢滑動返回功能,推薦判斷平臺后再使用。

修改對話框中的復(fù)選框狀態(tài),最簡便的方法是通過 Element 中的 markNeedsBuild 方法:

當(dāng)然,更推薦的做法是通過 StatefulBuilder ,然后就可以在 Dialog 中調(diào)用 setState 方法了,不過在調(diào)用 setState 時需要判斷 Dialog 是否已經(jīng)關(guān)閉,否則會造成 setState() called after dispose() 的錯誤,可以通過添加一個標(biāo)志位來解決,如下:

在 Web 中加載網(wǎng)絡(luò)圖片有時會失敗,遇到這樣的報錯: Exception caught by image resource service... ,造成該錯誤的原因通常是,圖片跨域了(見 跨域資源共享 )。最簡單的解決辦法是, 使用 HTML 渲染加載 ,而不是默認(rèn)的 CanvasKit。

Flutter 中所有的 list 默認(rèn)都是沒有 ScrollBar 的,必須使用 ScrollBar 組件。ScrollBar 組件通過監(jiān)聽 ScrollView 的 ScrollNotification 來刷新位置,所以 List 的長度必須是固定的。

當(dāng)使用 WebView 等高度不定的組件時會出現(xiàn)內(nèi)容被截斷的情況,通常可以使用 NestedScrollView 來解決該問題,需要在 WebView 外部嵌套 SingleChildScrollView。

雖然使用了緩存,而且也是用 builder 加載圖片的,但是發(fā)現(xiàn)一個現(xiàn)象:滑動屏幕后圖片短暫消失并重新加載了。圖片高度很高時這種現(xiàn)象更加明顯,其原因是超出屏幕范圍一定距離的組件被重新渲染了。解決方法是在 ListView 上設(shè)置 cacheExtent 參數(shù):

該參數(shù)的作用是改變超出屏幕高度后繼續(xù)渲染的范圍(以像素為單位),比如設(shè)置成 9999 后意味著超出屏幕 10000 像素以內(nèi)的內(nèi)容都會被保留下來。

借助 IntrinsicHeight 組件:

另外,IntrinsicHeight 還可以用于 Dialog 或者 BottomSheet 中,使得其中的元素 顯示內(nèi)在元素的高度 ,從而避免元素因為約束的存在而不顯示或者高度太高(比如在使用了 Column 或者 Row 的時候)。

在通過 Uri 的 queryParameters 獲取 query 參數(shù)時,發(fā)現(xiàn)有些鏈接會拋出下面異常:

造成該異常的原因是 Uri 默認(rèn)使用 utf-8 解碼超鏈接字符串,如果鏈接中包含非 utf-8 字符,就會造成上面的錯誤,相關(guān) issue 見: issue #31621 。目前該 issue 處于 open 的狀態(tài),暫時的解決辦法是,在所有使用到 queryParameter 的地方用 try..catch 捕捉可能拋出的異常。

Flutter 開發(fā)非常依賴各種官方或第三方的插件,而在使用這些插件時多少都會遇到一些問題,大部分問題都可以通過搜索和查找 issue 來解決。這里記錄下一些我在使用部分插件時遇到的問題及其解決方法。

目前該庫沒有圖片加載完成的回調(diào)(見 issue #545 ),不過我們可以通過在 imageBuilder 中來添加回調(diào):

這是一個應(yīng)用內(nèi)更新插件,安卓 10 以上安裝時需要在 manifest 中添加以下內(nèi)容:

目前功能最強(qiáng)大的 WebView 插件,基本能滿足絕大部分移動端網(wǎng)頁加載的需求,而且可定制化程度高。

一般通過 CookieManager 修改 Cookie,攔截請求并修改請求對象的 Header 不會生效。

InAppWebViewOptions 的 userAgent 只在 iOS 上生效,而 applicationNameForUserAgent 只在 Android 上生效,所以最好的做法是分平臺設(shè)置 InAppWebViewOptions ,而且需要注意,由于設(shè)置 userAgent 后會覆蓋默認(rèn)的 UserAgent,所以如果需要在默認(rèn)的 UserAgent 上添加其它參數(shù),iOS 上需要通過 InAppWebViewController.getDefaultUserAgent() 獲取默認(rèn) UserAgent 參數(shù),而 Android 不需要添加。

如果圖片源或者請求是 http 的,為了在 Android 上正常加載請求,必須在 AndroidInAppWebViewOptions 中將 mixedContentMode 設(shè)置為 AndroidMixedContentMode.MIXED_CONTENT_ALWAYS_ALLOW 。

當(dāng)我們想要設(shè)置全屏圖片的時候,由于默認(rèn)的 Constraint 會將圖片居中顯示,所以圖片四周會留有空隙。為了去除這個限制,我們需要 Xcode 中打開 LaunchScreen.storyboard,然后在 View Controller 的 View 和 LaunchImage 上的 Safe Area 去掉。

具體設(shè)置方法:右側(cè) Inspector 面板 Show the Size inspector 解選 Layout Margins 中的 Safe Area Relative Margins,拖動圖片占滿全屏,然后根據(jù) View Controller Scene 的 Warning,更新 Constraint 就可以了。

在集成某些三方庫之后,在使用命令行運(yùn)行 iOS 模擬器的時候可能會遇到下面這個報錯:

這是因為 iOS 模擬器未來將會兼容 arm64 架構(gòu),但是目前還不支持,所以我們需要修改 Build Setting 使得能夠在 x86_64 的模擬器上運(yùn)行,操作步驟見 這里 。

flutter 插件開發(fā)

new flutter project,選擇Flutter Plugin,next,輸入插件名,包名,運(yùn)行平臺及編寫語言,finish!

如上圖,筆者的插件名為log_plugin,選用Android,java語言開發(fā)

在自動打開和插件名同名的dart文件,聲明要使用其他語言的方法,本例使用java 語言實現(xiàn)Android原生的log輸出

編輯 android/src/main/java/com/whh/log_plugin/LogPlugin.java

在onMethodCall方法中,區(qū)別聲明方法名,以實現(xiàn)該方法邏輯

至此,簡單的插件開發(fā)完成,接下來測試

example是插件測試工程,打開其中的main.dart

打開已有的或者新建一個flutter app project,在其pubspec.yaml引入插件

使用pub get 關(guān)聯(lián)到插件

詳見官網(wǎng)文檔

此文為 flutter 初學(xué)者記錄學(xué)習(xí)過程,附上 github ,小小分享~

每天進(jìn)步一點點。。。(2021-08-10)

網(wǎng)頁題目:flutter離線開發(fā),flutter原生混合開發(fā)
瀏覽地址:http://chinadenli.net/article40/dseioho.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供響應(yīng)式網(wǎng)站移動網(wǎng)站建設(shè)企業(yè)網(wǎng)站制作域名注冊微信公眾號網(wǎng)站設(shè)計

廣告

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

微信小程序開發(fā)