現(xiàn)在的小目標(biāo)是要實(shí)現(xiàn)一個(gè) 「圖片輪播」的效果,我們?cè)?Android 中可以使用 ViewPager 結(jié)合 handler 或者 Timer 去實(shí)現(xiàn)。

只為您設(shè)計(jì)更接底氣、較有營(yíng)銷力的好網(wǎng)站,將營(yíng)銷策劃與網(wǎng)頁(yè)設(shè)計(jì)互相結(jié)合的專業(yè)機(jī)構(gòu),成都營(yíng)銷網(wǎng)站建設(shè)公司中較早掌握H5技術(shù)技術(shù)的機(jī)構(gòu)。一個(gè)好的高端網(wǎng)站設(shè)計(jì),不能只是一張名片,茫茫網(wǎng)海,想要快速吸引到您客戶的眼球,必須全方位的展現(xiàn)出企業(yè)突出的優(yōu)勢(shì),以求達(dá)到主動(dòng)營(yíng)銷的效果,最終促成成交!
而我們?cè)? Flutter 中,其實(shí)也是類似的。
那么,在 Flutter 中,代替 Android 中的 ViewPager 組件是 PageView ,而且,這個(gè) PageView 相比 ViewPager 擴(kuò)展性更高。
我們來(lái)看一下
Flutter PageView 官網(wǎng)
根據(jù)官網(wǎng)的介紹, PageView 在需要展示的頁(yè)面很多時(shí),有「控件復(fù)用」功能,而且,我們還可以通過(guò)
來(lái)設(shè)置滾動(dòng)的方向,也就是說(shuō),我們還可以完成「縱向滾動(dòng)」,真的很棒有么有?
偷的小米官網(wǎng)的輪播圖
看一下效果圖
GestureDetector ,或者直接返回一個(gè) button 類型的 Widget 即可
ok,了解了這個(gè)PageView,接下來(lái),我們想法子搞一個(gè)「輪播效果」,請(qǐng)見(jiàn)下一篇文章。
先上圖(樣式自己調(diào)整)
1.新建小部件
根據(jù)實(shí)際情況修改以下部分內(nèi)容;
2.使用(index 為當(dāng)前點(diǎn)擊圖片的下標(biāo),)
一. flutter中我們想加載本地圖片,需要兩步:
二. flutter項(xiàng)目中本地圖片加載的原理
在加載圖片時(shí),系統(tǒng)自動(dòng)會(huì)根據(jù)屏幕分辨率優(yōu)先選擇到符合自己分配率的文件夾(2.0x或者3.0x或者4.0x)下去取相對(duì)應(yīng)的圖片,如果當(dāng)前文件夾下沒(méi)有,則會(huì)到低一倍的文件夾下去,如果還沒(méi)有,則繼續(xù)向更低一倍去取。(比如:iOS 5.5英寸及以上屏幕會(huì)優(yōu)先選擇去3.0x下去取圖片,如果3.0x不存在或者3.0x文件夾下沒(méi)有,則去2.0x下取;如果2.0x不存在或者2.0x下沒(méi)有,則去1.0x下取;1.0x下再?zèng)]有,則在images文件下取)。
空間超出提示
注釋 :Flutter Incorrect use of ParentDataWidget
問(wèn)題原因:Expanded、Flexible等組件,在“Container、Padding、Stack”組件中導(dǎo)致的。
解決方案:保持: Expanded、Flexible 只在 Row、Column 等組件內(nèi),不在其他組件內(nèi)使用。
控件Row有一個(gè)水平的布局方向,但是內(nèi)容已經(jīng)超出了可顯示的范圍。
建議我們使用有彈性的控件比如Expanded代替,或者使用可裁剪的控件ClipRect代替,還可以使用具體滾動(dòng)屬性的控件比如ListView代替
1、類似圖片加載失敗,然后溢出擠壓空間,可以用Container包裹一下
直接使用,如果圖片地址失效,就會(huì)溢出
直接使用,圖片鏈接失效引起
2、類似這種超出
A RenderFlex overflowed by 48 pixels on the right.
3、類似這種Column滾動(dòng)超出!
實(shí)現(xiàn)頁(yè)面滑動(dòng)需要用到SingleChildScrollView組件,SingleChildScrollView和Android中ScrollView類似
問(wèn)題原因:Expanded、Flexible等組件,在“Container、Padding、Stack”組件中導(dǎo)致的。
解決方案:保持:Expanded、Flexible只在Row、Column等組件內(nèi),不在其他組件內(nèi)使用。
在Flutter中,我們可以使用Image控件來(lái)顯示圖片,一般來(lái)講我們的圖片資源都來(lái)源于網(wǎng)絡(luò)或者本地圖片。
Flutter中的Image也是類似。
我們先來(lái)看看Image的構(gòu)造方法
下面我們來(lái)看看其常用的屬性
可以看到,其常用屬性跟前端中的css很像。
下面我們來(lái)簡(jiǎn)單用一用Image控件
首先是必填參數(shù)image,它接收一個(gè)ImageProvider類型的值。ImageProvider是一個(gè)抽象類,他下面有下圖這些實(shí)現(xiàn)類,由下面這些實(shí)現(xiàn)類可以看出,image是可以從資源,內(nèi)存,網(wǎng)絡(luò),和文件中獲取圖片。
我們先來(lái)試試加載網(wǎng)絡(luò)圖片
首先看看NetworkImage構(gòu)造方法,很簡(jiǎn)單,傳個(gè)url就可以了
如下:
嗯,就是這么簡(jiǎn)單。其他3種情況使用也是類似的,自行看源碼即可。
實(shí)際上,F(xiàn)lutter給我們提供了擴(kuò)展方法,使用起來(lái)更加簡(jiǎn)單,通常我們直接使用提供的擴(kuò)展方法即可
如下
可以看到,他們的構(gòu)造方法基本類似。
所以我們也可以這樣寫(xiě),跟上面的效果是一致的。
大致分為一下幾步
1.創(chuàng)建一個(gè)文件夾,用于存放圖片,如圖,我創(chuàng)建了一個(gè)imgs的文件夾,放了一張圖片
2.在pubspec.yaml中聲明資源,注意聲明的時(shí)候路徑和前面的-是有間隔的,不然的話會(huì)報(bào)#/properties/flutter/properties/assets: type: wanted [array] got -imgs/code.png
類似的錯(cuò)誤,聲明完成后點(diǎn)擊右上方的packages get
或
下面我們?cè)賮?lái)看看其他屬性。
width,height
寬高沒(méi)什么好說(shuō)的,就是設(shè)置寬度和高度
配合color使用,用于設(shè)置顏色的混合模式。BlendMode是一個(gè)枚舉,他有很多值
詳細(xì)解析還是看官方文檔吧,值太多了,我們隨便用用
用于設(shè)置圖片的填充方式,當(dāng)圖片本身小于設(shè)置的寬高或者比父控件的寬高小時(shí),我們可以設(shè)置該屬性控制圖片的顯示。
其值的類型是BoxFit。是個(gè)枚舉
具體含義還是直接看文檔即可
設(shè)置圖片的對(duì)齊方式,接收一個(gè)Alignment類型的值,值如下,很好理解
為了方便看效果我們?cè)谕膺吿琢藗€(gè)Container,簡(jiǎn)單的把它理解為一個(gè)容器布局就可以了,類似于html中的div或android中的Layout,我們給Container設(shè)置了寬高和背景顏色。
bottomLeft效果如下,其他的自行嘗試
相對(duì)于Image,ICON可以像web一樣使用字體圖標(biāo),并且可以使用矢量圖,無(wú)需擔(dān)心失真的問(wèn)題,并且體積相對(duì)較小。
我們先來(lái)看看其構(gòu)造方法
很簡(jiǎn)單,我們直接來(lái)用一用
默認(rèn)情況下,pubspec.yaml中uses-material-design的值為true.我們默認(rèn)就可以使用Material Design字體圖標(biāo)
在編寫(xiě)幾個(gè) Flutter 項(xiàng)目后,發(fā)現(xiàn) Flutter 的強(qiáng)大之處在于業(yè)務(wù)中所有用到的控件以及場(chǎng)景都有對(duì)應(yīng)的處理方案;而 Dart 語(yǔ)言也與 Java 、 Kotlin 類似,所以對(duì) Android 開(kāi)發(fā)者來(lái)說(shuō)門(mén)檻非常低;特意記錄一下常用的控件及其使用:
StatelessWidget 不需要額外的創(chuàng)建 State
StatefulWidget 創(chuàng)建 State 類,并可以在其中保存一些狀態(tài)
only 可以單獨(dú)設(shè)置每個(gè)方向的內(nèi)邊距
類似于 LinearLayout 中的 orientation 設(shè)置為 vertical , mainAxisAlignment 表示豎向的一個(gè)對(duì)齊方式, crossAxisAlignment 表示橫向的對(duì)齊方式
與 Column 相反,主軸是橫向,對(duì)齊方式類似, crossAxisAlignment 表示豎向的對(duì)齊方式
類似 SizedBox ,一個(gè)容器,但是主要功能是有一個(gè) decoration —— 裝飾器,作用是繪制背景,或者使用 item 中的陰影
棧,先入后出,類似于 Android 上的 FrameLayout
通常配合 Stack 使用,固定顯示在某一個(gè)位置
配合多 child 使用,會(huì)填充剩余的空間
Image 功能強(qiáng)大,使用不同的方法可以加載不同來(lái)源的圖片
看到這些方法,突然覺(jué)得 Flutter 太香了,而且 Image 可以配置 clip 等裁剪出不同形狀的圖片,無(wú)論是圓形還是五角星都不在話下,然而 Android 要實(shí)現(xiàn)不規(guī)則的形狀,可是要下不少功夫的。
名字和 Android 的一模一樣,但是用法卻比 Android 的簡(jiǎn)單很多:
主要就是 itemCount 與 itemBuilder ,其余就是配置樣式, itemBuilder 需要返回一個(gè) widget ,當(dāng)然了,每個(gè) ListView 都有其對(duì)應(yīng)的 item ,在里面的方法中編寫(xiě) widget 即可
與 ListView 類似,但是需要有一個(gè) delegate 類,作用是設(shè)置有多少列,每一列之間的間距是多少
GridView 沒(méi)有 build , children 表示所有的子 view
最常用的控件之一,有非常多的樣式, Flutter 中通常是使用裝飾器來(lái)處理控件的,如背景使用 BoxDecoration , TextFiled 使用 InputDecoration ; 使用如下
當(dāng)前文章:flutter圖片翻頁(yè),flutter 圖片列表
網(wǎng)頁(yè)URL:http://chinadenli.net/article17/dsiesgj.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站設(shè)計(jì)、網(wǎng)站維護(hù)、網(wǎng)站排名、網(wǎng)站建設(shè)、商城網(wǎng)站、響應(yīng)式網(wǎng)站
聲明:本網(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)
網(wǎng)頁(yè)設(shè)計(jì)公司知識(shí)