color: Color(0xFF5e12a9)
在達(dá)日等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強(qiáng)發(fā)展的系統(tǒng)性、市場(chǎng)前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供成都網(wǎng)站制作、網(wǎng)站建設(shè)、外貿(mào)網(wǎng)站建設(shè) 網(wǎng)站設(shè)計(jì)制作按需求定制制作,公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),品牌網(wǎng)站建設(shè),成都全網(wǎng)營(yíng)銷推廣,外貿(mào)營(yíng)銷網(wǎng)站建設(shè),達(dá)日網(wǎng)站建設(shè)費(fèi)用合理。
00%=FF(不透明)
5%=F2
10%=E5
15%=D8
20%=CC
25%=BF
30%=B2
35%=A5
40%=99
45%=8c
50%=7F
55%=72
60%=66
65%=59
70%=4c
75%=3F
80%=33
85%=21
90%=19
95%=0c
100%=00(全透明)
參考原文鏈接:
本次主要是記錄Fultter Theme主題的設(shè)備與AppBar中的一些屬性的使用及說(shuō)明。目前項(xiàng)目開發(fā)有了四個(gè)界面。前期主題沒(méi)太注意,今天看來(lái)要好好總結(jié)一下近期所學(xué)。
首先,Android主題沉浸式設(shè)置,F(xiàn)lutter篇:
根據(jù)字面意思就能看出來(lái)是對(duì)狀態(tài)懶得設(shè)置,其中用到了 dart:io 與 flutter/services.dart 這兩個(gè)重點(diǎn)Mark一下,有時(shí)間深入探究一下用法跟能力?;貧w正題。
主題數(shù)據(jù),其中最常用的是 primarySwatch 、 primaryColor 、 accentColor 。
primarySwatch:UI右下角的FloatingActionButton的顏色就是默認(rèn)取值MaterialColor,
默認(rèn)是藍(lán)色的,如果修改成primarySwatch,就會(huì)變成這個(gè)顏色值。只支持MaterialColor。
primaryColor:頂部導(dǎo)航欄和狀態(tài)欄的顏色修改,需要用到這個(gè)屬性,類型 Color。
accentColor:前景色(文本、按鈕、覆蓋邊緣效果等)。
看一下項(xiàng)目中的使用
其中 brightness 主題設(shè)置較為關(guān)鍵,它是設(shè)置狀態(tài)欄圖標(biāo)與字體顏色的。
brightness: Brightness.dark 狀態(tài)欄圖標(biāo)與字體顏色為白色。
brightness: Brightness.light 狀態(tài)欄圖標(biāo)與字體顏色為黑色。
iconTheme :設(shè)置appbar icon的顏色,appbar中icon的顏色會(huì)根據(jù)primaryColor的改變來(lái)確定自身的顏色,這里可以在iconTheme中指定icon的顏色。
默認(rèn)不做修改前:
CustomPaint class提供了讓用戶自定義widget的能力,它暴露了一個(gè)canvas,可以通過(guò)這個(gè)canvas來(lái)繪制widget,CustomPaint會(huì)先調(diào)用painter繪制背景,然后再繪制child,最后調(diào)用foregroundPainter來(lái)繪制前景,CustomPaint的定義如下
CustomPaint的繪制過(guò)程都將會(huì)交給CustomPainter來(lái)完成,CustomPainter是個(gè)抽象接口,在子類化CustomPainter的時(shí)候必須要重寫它的 paint 跟 shouldRepaint 接口,可以根據(jù)自己的場(chǎng)景來(lái)選擇性的重寫 hitTest 跟 shouldRebuildSemantics 方法。
canvas--畫布,真正的繪制是由canvas跟paint來(lái)完成的,畫布提供了各種繪制的接口來(lái)繪制圖形,除此以外畫布還提供了平移、縮放、旋轉(zhuǎn)等矩陣變換接口,畫布都有固定大小跟形狀,還可以使用畫布提供的裁剪接口來(lái)裁剪畫布的大小形狀等等。
常用的繪制接口有 更多請(qǐng)查看官方文檔
Paint---筆畫,是用來(lái)設(shè)置在畫布上面繪制圖形時(shí)的一些筆畫屬性,如:顏色、線寬、繪制模式、抗鋸齒等等。常用屬性有 更多請(qǐng)查看官方文檔
color : 設(shè)置畫筆顏色
isAntiAlias : 設(shè)置畫筆是否扛鋸齒
shader : 著色器,填充形狀或者畫線時(shí)用到,如果沒(méi)設(shè)置將會(huì)使用color
strokeWidth : 設(shè)置畫筆畫線寬度
style :繪制模式,畫線或充滿
下面這個(gè)例子來(lái)自于官方,通過(guò) CustomPaint 畫出了一個(gè)藍(lán)天跟太陽(yáng)出來(lái)
效果如下:
下面這種情況下,為 InkWell 設(shè)置的 splashColor 不會(huì)生效:
需要用 Material 去除背景色,然后將顏色設(shè)置在 InkWell 外部:
在 Dialog builder 中使用 WillPopScope 禁用返回鍵返回:
注意:使用此方法同時(shí)也會(huì)禁用 iOS 上的手勢(shì)滑動(dòng)返回功能,推薦判斷平臺(tái)后再使用。
修改對(duì)話框中的復(fù)選框狀態(tài),最簡(jiǎn)便的方法是通過(guò) Element 中的 markNeedsBuild 方法:
當(dāng)然,更推薦的做法是通過(guò) StatefulBuilder ,然后就可以在 Dialog 中調(diào)用 setState 方法了,不過(guò)在調(diào)用 setState 時(shí)需要判斷 Dialog 是否已經(jīng)關(guān)閉,否則會(huì)造成 setState() called after dispose() 的錯(cuò)誤,可以通過(guò)添加一個(gè)標(biāo)志位來(lái)解決,如下:
在 Web 中加載網(wǎng)絡(luò)圖片有時(shí)會(huì)失敗,遇到這樣的報(bào)錯(cuò): Exception caught by image resource service... ,造成該錯(cuò)誤的原因通常是,圖片跨域了(見 跨域資源共享 )。最簡(jiǎn)單的解決辦法是, 使用 HTML 渲染加載 ,而不是默認(rèn)的 CanvasKit。
Flutter 中所有的 list 默認(rèn)都是沒(méi)有 ScrollBar 的,必須使用 ScrollBar 組件。ScrollBar 組件通過(guò)監(jiān)聽 ScrollView 的 ScrollNotification 來(lái)刷新位置,所以 List 的長(zhǎng)度必須是固定的。
當(dāng)使用 WebView 等高度不定的組件時(shí)會(huì)出現(xiàn)內(nèi)容被截?cái)嗟那闆r,通??梢允褂?NestedScrollView 來(lái)解決該問(wèn)題,需要在 WebView 外部嵌套 SingleChildScrollView。
雖然使用了緩存,而且也是用 builder 加載圖片的,但是發(fā)現(xiàn)一個(gè)現(xiàn)象:滑動(dòng)屏幕后圖片短暫消失并重新加載了。圖片高度很高時(shí)這種現(xiàn)象更加明顯,其原因是超出屏幕范圍一定距離的組件被重新渲染了。解決方法是在 ListView 上設(shè)置 cacheExtent 參數(shù):
該參數(shù)的作用是改變超出屏幕高度后繼續(xù)渲染的范圍(以像素為單位),比如設(shè)置成 9999 后意味著超出屏幕 10000 像素以內(nèi)的內(nèi)容都會(huì)被保留下來(lái)。
借助 IntrinsicHeight 組件:
另外,IntrinsicHeight 還可以用于 Dialog 或者 BottomSheet 中,使得其中的元素 顯示內(nèi)在元素的高度 ,從而避免元素因?yàn)榧s束的存在而不顯示或者高度太高(比如在使用了 Column 或者 Row 的時(shí)候)。
在通過(guò) Uri 的 queryParameters 獲取 query 參數(shù)時(shí),發(fā)現(xiàn)有些鏈接會(huì)拋出下面異常:
造成該異常的原因是 Uri 默認(rèn)使用 utf-8 解碼超鏈接字符串,如果鏈接中包含非 utf-8 字符,就會(huì)造成上面的錯(cuò)誤,相關(guān) issue 見: issue #31621 。目前該 issue 處于 open 的狀態(tài),暫時(shí)的解決辦法是,在所有使用到 queryParameter 的地方用 try..catch 捕捉可能拋出的異常。
Flutter 開發(fā)非常依賴各種官方或第三方的插件,而在使用這些插件時(shí)多少都會(huì)遇到一些問(wèn)題,大部分問(wèn)題都可以通過(guò)搜索和查找 issue 來(lái)解決。這里記錄下一些我在使用部分插件時(shí)遇到的問(wèn)題及其解決方法。
目前該庫(kù)沒(méi)有圖片加載完成的回調(diào)(見 issue #545 ),不過(guò)我們可以通過(guò)在 imageBuilder 中來(lái)添加回調(diào):
這是一個(gè)應(yīng)用內(nèi)更新插件,安卓 10 以上安裝時(shí)需要在 manifest 中添加以下內(nèi)容:
目前功能最強(qiáng)大的 WebView 插件,基本能滿足絕大部分移動(dòng)端網(wǎng)頁(yè)加載的需求,而且可定制化程度高。
一般通過(guò) CookieManager 修改 Cookie,攔截請(qǐng)求并修改請(qǐng)求對(duì)象的 Header 不會(huì)生效。
InAppWebViewOptions 的 userAgent 只在 iOS 上生效,而 applicationNameForUserAgent 只在 Android 上生效,所以最好的做法是分平臺(tái)設(shè)置 InAppWebViewOptions ,而且需要注意,由于設(shè)置 userAgent 后會(huì)覆蓋默認(rèn)的 UserAgent,所以如果需要在默認(rèn)的 UserAgent 上添加其它參數(shù),iOS 上需要通過(guò) InAppWebViewController.getDefaultUserAgent() 獲取默認(rèn) UserAgent 參數(shù),而 Android 不需要添加。
如果圖片源或者請(qǐng)求是 http 的,為了在 Android 上正常加載請(qǐng)求,必須在 AndroidInAppWebViewOptions 中將 mixedContentMode 設(shè)置為 AndroidMixedContentMode.MIXED_CONTENT_ALWAYS_ALLOW 。
當(dāng)我們想要設(shè)置全屏圖片的時(shí)候,由于默認(rèn)的 Constraint 會(huì)將圖片居中顯示,所以圖片四周會(huì)留有空隙。為了去除這個(gè)限制,我們需要 Xcode 中打開 LaunchScreen.storyboard,然后在 View Controller 的 View 和 LaunchImage 上的 Safe Area 去掉。
具體設(shè)置方法:右側(cè) Inspector 面板 Show the Size inspector 解選 Layout Margins 中的 Safe Area Relative Margins,拖動(dòng)圖片占滿全屏,然后根據(jù) View Controller Scene 的 Warning,更新 Constraint 就可以了。
在集成某些三方庫(kù)之后,在使用命令行運(yùn)行 iOS 模擬器的時(shí)候可能會(huì)遇到下面這個(gè)報(bào)錯(cuò):
這是因?yàn)?iOS 模擬器未來(lái)將會(huì)兼容 arm64 架構(gòu),但是目前還不支持,所以我們需要修改 Build Setting 使得能夠在 x86_64 的模擬器上運(yùn)行,操作步驟見 這里 。
Image是一個(gè)用于展示圖片的組件。支持 JPEG、PNG、GIF、Animated GIF、WebP、Animated WebP、BMP 和 WBMP 等格式。
Image.asset - 用于從資源目錄的顯示圖片,需要在 pubspec.yaml 文件中聲明。
Image.network - 用于從網(wǎng)絡(luò)上顯示圖片。
Image.file - 用于從文件里顯示圖片。
Image.memory - 用于從內(nèi)存里(Uint8List)顯示圖片。
alignment → AlignmentGeometry - 圖像邊界內(nèi)對(duì)齊圖像。
centerSlice → Rect - 九片圖像的中心切片。
color → Color - 該顏色與每個(gè)圖像像素混合colorBlendMode。
colorBlendMode → BlendMode - 用于 color 與此圖像結(jié)合使用。
fit → BoxFit - 圖像在布局中分配的空間。
gaplessPlayback → bool - 當(dāng)圖像提供者發(fā)生變化時(shí),是繼續(xù)顯示舊圖像(true)還是暫時(shí)不顯示(false)。
image → ImageProvider - 要顯示的圖像。
matchTextDirection → bool - 是否在圖像的方向上繪制圖像 TextDirection。
repeat → ImageRepeat - 未充分容器時(shí),是否重復(fù)圖片。
height → double - 圖像的高度。
width → double - 圖像的寬度。
加載資源圖片需要將圖片資源放入工程中,例如:新建images文件夾,將圖片放在該文件夾下,圖片適配則是使用ios的方式1X,2X,3X:
然后在pubspec.yaml中配置assets:
加載資源/網(wǎng)絡(luò)/本地文件圖片/內(nèi)存圖片:
占位圖加載圖片:
圓形圖片:1.裁剪實(shí)現(xiàn) 2.CircleAvatar實(shí)現(xiàn) 3.Container邊框?qū)崿F(xiàn)
圓角圖片:1.裁剪實(shí)現(xiàn) 2.Container邊框?qū)崿F(xiàn)
BoxFit.contain 全圖居中顯示但不充滿,顯示原比例
BoxFit.cover 圖片可能拉伸,也可能裁剪,但是充滿容器
BoxFit.fill 全圖顯示且填充滿,圖片可能會(huì)拉伸
BoxFit.fitHeight 圖片可能拉伸,可能裁剪,高度充滿
BoxFit.fitWidth 圖片可能拉伸,可能裁剪,寬度充滿
BoxFit.scaleDown 效果和contain差不多, 但是只能縮小圖片,不能放大圖片
下一節(jié)學(xué)習(xí)基礎(chǔ)組件之Text
主要用到的是appbar中的brightness屬性,brightness有兩個(gè)值可取,分別是Brightness.dark和Brightness.light.
另一種方案是:就是用AnnotatedRegionSystemUiOverlayStyle包裹,
發(fā)現(xiàn)一種更靈活的辦法,如下:
只需要在最外層包裹一下,然后設(shè)置狀態(tài)欄字體顏色就可以了,可以不用appbar,更加靈活
網(wǎng)頁(yè)題目:flutter顏色,flutter color
文章起源:http://jinyejixie.com/article40/dssddeo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站排名、手機(jī)網(wǎng)站建設(shè)、虛擬主機(jī)、小程序開發(fā)、域名注冊(cè)、外貿(mào)建站
聲明:本網(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í)需注明來(lái)源: 創(chuàng)新互聯(lián)