下面這種情況下,為 InkWell 設(shè)置的 splashColor 不會生效:
克拉瑪依區(qū)ssl適用于網(wǎng)站、小程序/APP、API接口等需要進(jìn)行數(shù)據(jù)傳輸應(yīng)用場景,ssl證書未來市場廣闊!成為創(chuàng)新互聯(lián)公司的ssl證書銷售渠道,可以享受市場價格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:028-86922220(備注:SSL證書合作)期待與您的合作!
需要用 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)在元素的高度 ,從而避免元素因?yàn)榧s束的存在而不顯示或者高度太高(比如在使用了 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 模擬器的時候可能會遇到下面這個報錯:
這是因?yàn)?iOS 模擬器未來將會兼容 arm64 架構(gòu),但是目前還不支持,所以我們需要修改 Build Setting 使得能夠在 x86_64 的模擬器上運(yùn)行,操作步驟見 這里 。
一年半前玩過flutter,忘光光...現(xiàn)在是時候重新拾取了。~
啟動頁一般只放圖片或者加幾行文字。
1、創(chuàng)建好flutter項目之后,在lib文件下面新建launch.dart或xx.dart.
2、在根目錄下新建images文件夾,如已有直接放入圖片
3、flutter_yijiake.iml中加入注入該圖片,并注意空格
4、在根目錄下的test/widget_test.dart中更改默認(rèn)的啟動頁為當(dāng)前的啟動頁路徑
5、最后重新設(shè)置啟動時的頁面
6、非常簡單的啟動頁面放logo圖片
值得一說的是,flutter框架的UI組件需要已new 組件的形式展開。
使用Tween動畫,改變控件距左距離
展開時,展示菜單控件,動畫正向執(zhí)行;收起后,動畫反向執(zhí)行,隱藏菜單控件;
SliverAppBar 控件,一個 MD 的 AppBar 。屬性和 AppBar 類似,但做的效果比 AppBar 更加強(qiáng)大。相同的屬性具體可以看 Flutter 之 Scaffold 控件 , 里面有 AppBar 控件的介紹。那么還有些沒有的屬性:
結(jié)合 elevation 使用,當(dāng)elevation 不為 0 的時候,是否顯示陰影
AppBar 展開時候的高度
true 的時候下滑AppBar優(yōu)先滑動展示,展示完成后才給滑動控件滑動
snap 為 true, 則 floating 也要為 true 。true 的時候根據(jù)手指松開的位置展開或者收縮AppBar
appBar 收縮到最小高度的時候 appBar 是否可見
SliverAppBar 往往做為 CustomScrollView 的第一個子元素,根據(jù)滾動控件的偏移量或者浮動的位置來改變 SliverAppBar 的高度。所以具體用法如下
另外在上面設(shè)計到 FlexibleSpaceBar 控件,F(xiàn)lexibleSpaceBar 有個 collapseMode 屬性
為 Sliver 系列控件添加一個 padding 。如給上面 SliverAppBar 添加一個 Padding 。
多行多列的列表控件,相當(dāng)于 Android 的 GridView,有兩個屬性
SliverChildDelegate,這里有兩種方式創(chuàng)建
SliverGridDelegate,也是有兩種方式創(chuàng)建
結(jié)合上面展示效果
和上面 delegate 屬性一樣,需要創(chuàng)建一個 SliverChildDelegate 。
比 SliverList 多一個 itemExtent 屬性,設(shè)置 item 的高度 。item 里面的子控件無法再改動高度。
上面 SliverAppBar 就是結(jié)合 SliverPersistentHeader 實(shí)現(xiàn)的效果,SliverPersistentHeader 需要一個 SliverPersistentHeaderDelegate 。 實(shí)現(xiàn) SliverPersistentHeaderDelegate 有 4 個方法需要重寫
至于效果,具體效果具體分析。
有一個 Widget 屬性,主要作用是在 CustomScrollView 里面添加多種不同布局的樣式。
占滿一屏或者比一屏更多的布局,
滑動剩余部分展示的布局