flutter多行,flutter多語(yǔ)言切換

Flutter 之 Sliver 系列控件

SliverAppBar 控件,一個(gè) MD 的 AppBar 。屬性和 AppBar 類(lèi)似,但做的效果比 AppBar 更加強(qiáng)大。相同的屬性具體可以看 Flutter 之 Scaffold 控件 , 里面有 AppBar 控件的介紹。那么還有些沒(méi)有的屬性:

從策劃到設(shè)計(jì)制作,每一步都追求做到細(xì)膩,制作可持續(xù)發(fā)展的企業(yè)網(wǎng)站。為客戶提供成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)站制作、網(wǎng)站策劃、網(wǎng)頁(yè)設(shè)計(jì)、域名申請(qǐng)、虛擬空間、網(wǎng)絡(luò)營(yíng)銷(xiāo)、VI設(shè)計(jì)、 網(wǎng)站改版、漏洞修補(bǔ)等服務(wù)。為客戶提供更好的一站式互聯(lián)網(wǎng)解決方案,以客戶的口碑塑造優(yōu)易品牌,攜手廣大客戶,共同發(fā)展進(jìn)步。

結(jié)合 elevation 使用,當(dāng)elevation 不為 0 的時(shí)候,是否顯示陰影

AppBar 展開(kāi)時(shí)候的高度

true 的時(shí)候下滑AppBar優(yōu)先滑動(dòng)展示,展示完成后才給滑動(dòng)控件滑動(dòng)

snap 為 true, 則 floating 也要為 true 。true 的時(shí)候根據(jù)手指松開(kāi)的位置展開(kāi)或者收縮AppBar

appBar 收縮到最小高度的時(shí)候 appBar 是否可見(jiàn)

SliverAppBar 往往做為 CustomScrollView 的第一個(gè)子元素,根據(jù)滾動(dòng)控件的偏移量或者浮動(dòng)的位置來(lái)改變 SliverAppBar 的高度。所以具體用法如下

另外在上面設(shè)計(jì)到 FlexibleSpaceBar 控件,F(xiàn)lexibleSpaceBar 有個(gè) collapseMode 屬性

為 Sliver 系列控件添加一個(gè) padding 。如給上面 SliverAppBar 添加一個(gè) Padding 。

多行多列的列表控件,相當(dāng)于 Android 的 GridView,有兩個(gè)屬性

SliverChildDelegate,這里有兩種方式創(chuàng)建

SliverGridDelegate,也是有兩種方式創(chuàng)建

結(jié)合上面展示效果

和上面 delegate 屬性一樣,需要?jiǎng)?chuàng)建一個(gè) SliverChildDelegate 。

比 SliverList 多一個(gè) itemExtent 屬性,設(shè)置 item 的高度 。item 里面的子控件無(wú)法再改動(dòng)高度。

上面 SliverAppBar 就是結(jié)合 SliverPersistentHeader 實(shí)現(xiàn)的效果,SliverPersistentHeader 需要一個(gè) SliverPersistentHeaderDelegate 。 實(shí)現(xiàn) SliverPersistentHeaderDelegate 有 4 個(gè)方法需要重寫(xiě)

至于效果,具體效果具體分析。

有一個(gè) Widget 屬性,主要作用是在 CustomScrollView 里面添加多種不同布局的樣式。

占滿一屏或者比一屏更多的布局,

滑動(dòng)剩余部分展示的布局

flutter textfield邏輯行實(shí)際顯示了多少行

1行。fluttertextfield里minLines代表最少多少行,默認(rèn)為null,maxLines代表最多多少行,邏輯行實(shí)際默認(rèn)為1行,這也是為什么要將maxLines特意設(shè)置為空的原因了。

Flutter基礎(chǔ)篇之八-Expanded

? Expanded 使用與類(lèi)似與Column,Row,F(xiàn)lex等展示多個(gè)組件集合的組件,Expanded包含的組件可以占據(jù)剩余的空間。

?屏幕左邊是文字,最右邊是一個(gè)按鈕,文字?jǐn)?shù)據(jù)是服務(wù)器數(shù)據(jù)返回的,且多行顯示。

舉例:1:2:1

Flutter開(kāi)發(fā)--如何布局?

相對(duì)于iOS開(kāi)發(fā),F(xiàn)lutter的布局更具有靈活性,每個(gè)頁(yè)面設(shè)計(jì)都不一樣,相同頁(yè)面可選擇的布局方式也不一樣,如果單純的說(shuō)應(yīng)該如何去布局,我覺(jué)得不現(xiàn)實(shí),大家可以參考下 Flutter官方的布局教程 。接下來(lái),筆者,通過(guò)項(xiàng)目中的一個(gè)頁(yè)面,來(lái)一步一步的拆解布局的流程。整個(gè)過(guò)程,基本上按照拆解、組件封裝、具體布局這三步來(lái)的。

根據(jù)設(shè)計(jì)圖,可以看出整體可以分成兩部分,上面一部分是系統(tǒng)介紹模塊,下面一部分是真正的登錄內(nèi)容,因?yàn)樯婕暗蒋B加,因此考慮用Stack;

系統(tǒng)介紹模塊部分:整體也是涉及到疊加,考慮用Stack,分為四部分。最底部漸變色背景用一個(gè)contanier,無(wú)須指定位置,全視圖擴(kuò)展;載放logo圖標(biāo)在上一層,用Image。最后兩個(gè)Text同級(jí)放在最上層。Image,Text各用Positioned包裹去指定位置。

登錄內(nèi)容模塊是最外層是一個(gè)Contanier容器,去控制背景色和圓角。然后是一個(gè)Column元素,逐行排列。

第一行為Image,

第二行為T(mén)ext,

第三行可以看成一個(gè)小Column,分兩塊進(jìn)行布局

第四行可以看成一個(gè)小Column,分兩塊進(jìn)行布局

第五行可以看作一個(gè)TextButton,

第六行可以看作一個(gè)Row,分三塊進(jìn)行布局

通過(guò)上面這樣一步一步的分析后,基本上對(duì)大致的布局有了一個(gè)了解,最外層的控件大致選對(duì)(只要能實(shí)現(xiàn)的話,就是復(fù)雜度以及效率的問(wèn)題),然后一步一步的拆解每一行的元素,如果有重復(fù)的或者覺(jué)得可以封裝出來(lái)的部分,則進(jìn)行下一步。

每一行的拆解,大致也是按照這個(gè)思路來(lái)進(jìn)行,因此筆者在這里就不做講解了。

在做到第三第四行的時(shí)候,發(fā)現(xiàn)這兩個(gè)很相似,而且設(shè)計(jì)到一些交互邏輯,筆者就想對(duì)第三第四行的這種展示進(jìn)行封裝,覺(jué)得今后的布局可能會(huì)用到,因此在這一步,可以先把這一塊兒抽離出一個(gè)控件。利用TextField來(lái)實(shí)現(xiàn)這種輸入操作,具體的實(shí)現(xiàn)筆者不再詳細(xì)的描述了。

經(jīng)過(guò)這一步,整體的規(guī)劃設(shè)計(jì)圖已經(jīng)有了,各個(gè)組件也都有了,接下來(lái)的工作就是組裝了。

具體布局設(shè)計(jì)到一些細(xì)節(jié)的地方,例如整體Column的居中對(duì)齊(crossAxisAlignment)、間隔(Padding或Container包裹,筆者更喜歡用SizedBox占位)、居左居右居中(Align)、點(diǎn)擊事件(GestureDetector)以及圓角(BorderRadius)等一些特殊情況。

像第六行row是放在底部的,就可以在第六行前面增加一個(gè)Spacer()去填充空白區(qū)域。

對(duì)文字顏色大小等,可以用TextStyle直接設(shè)置。

對(duì)于輸入框的刪除按鈕,可以用Offstage這種Flutter特有的控制顯示隱藏的控件。

Flutter TextField 文本輸入框的基本屬性及詳解

源碼分析:

分析源碼可得,TextField 是有狀態(tài) StatefulWidget,有豐富的屬性,自定義化較高,實(shí)踐中需要合理利用各種回調(diào);

1、光標(biāo)的相關(guān)屬性;cursorColor 為光標(biāo)顏色,cursorWidth 為光標(biāo)寬度,cursorRadius 為光標(biāo)圓角;其中 Radius 提供了 circle 圓角和 elliptical 非圓角兩種;

2、textAlign 為文字起始位置,可根據(jù)業(yè)務(wù)光標(biāo)居左/居右/居中等;注意只是文字開(kāi)始方向;textDirection 問(wèn)文字內(nèi)容方向,從左向右或從右向左;

3、maxLength 為字符長(zhǎng)度,設(shè)置時(shí)默認(rèn)是展示一行,且右下角有編輯長(zhǎng)度與整體長(zhǎng)度對(duì)比;與 maxLengthEnforced 配合,maxLengthEnforced 為 true 時(shí)達(dá)到最大字符長(zhǎng)度后不可編輯;為 false 時(shí)可繼續(xù)編輯展示有差別;

4、設(shè)置 maxLength 之后右下角默認(rèn)有字符計(jì)數(shù)器,設(shè)置 TextField.noMaxLength 即可只展示輸入字符數(shù);

5、maxLines 為允許展現(xiàn)的最大行數(shù),在使用 maxLength 時(shí)內(nèi)容超過(guò)一行不會(huì)自動(dòng)換行,因?yàn)槟J(rèn) maxLines=1,此時(shí)設(shè)置為 null 或固定展示行數(shù)即可自動(dòng)換行;區(qū)別在于 null 會(huì)展示多行,而 maxLines 最多只展示到設(shè)置行數(shù);

6、obscureText 是否隱藏編輯內(nèi)容,常見(jiàn)的密碼格式;

7、enableInteractiveSelection 長(zhǎng)按是否出現(xiàn)【剪切/復(fù)制/粘貼】菜單;不可為空;

8、keyboardAppearance 為鍵盤(pán)亮度,包括 Brightness.dark/light 兩種,但僅限于 iOS 設(shè)備;

9、textCapitalization 文字大小寫(xiě);理論上 sentences 為每句話第一個(gè)字母大寫(xiě);characters為每個(gè)字母大寫(xiě);words 為每個(gè)單詞首字母大寫(xiě);但該屬性僅限于 text keybord,和尚在本地更換多種方式并未實(shí)現(xiàn),有待研究;

10、keyboardType 為鍵盤(pán)類(lèi)型,和尚理解整體分為數(shù)字鍵盤(pán)和字母鍵盤(pán)等;根據(jù)設(shè)置的鍵盤(pán)類(lèi)型,鍵盤(pán)會(huì)有差別;

a. 數(shù)字鍵盤(pán)

--1-- datetime 鍵盤(pán)上可隨時(shí)訪問(wèn) : 和 /;

--2-- phone 鍵盤(pán)上可隨時(shí)訪問(wèn) # 和 *;

--3-- number 鍵盤(pán)上可隨時(shí)訪問(wèn) + - * /

b. 字母鍵盤(pán)

--1-- emailAddress 鍵盤(pán)上可隨時(shí)訪問(wèn) @ 和 .;

--2-- url 鍵盤(pán)上可隨時(shí)訪問(wèn) / 和 .;

--3-- multiline 適用于多行文本換行;

--4-- text 默認(rèn)字母鍵盤(pán);

11、textInputAction 通常為鍵盤(pán)右下角操作類(lèi)型,類(lèi)型眾多,建議多多嘗試;

12、autofocus 是否自動(dòng)獲取焦點(diǎn),進(jìn)入頁(yè)面優(yōu)先獲取焦點(diǎn),并彈出鍵盤(pán),若頁(yè)面中有多個(gè) TextField 設(shè)置 autofocus 為 true 則優(yōu)先獲取第一個(gè)焦點(diǎn);

13、focusNode 手動(dòng)獲取焦點(diǎn),可配合鍵盤(pán)輸入等減少用戶操作次數(shù),直接獲取下一個(gè) TextField 焦點(diǎn);

14、enabled 設(shè)為 false 之后 TextField 為不可編輯狀態(tài);

15、decoration 為邊框修飾,可以借此來(lái)調(diào)整 TextField 展示效果;可以設(shè)置前置圖標(biāo),后置圖片,邊框?qū)傩裕瑑?nèi)容屬性等,會(huì)在后續(xù)集中嘗試;若要完全刪除裝飾,將 decoration 設(shè)置為空即可;

16、inputFormatters 為格式驗(yàn)證,例如原生 Android 中通常會(huì)限制輸入手機(jī)號(hào)或其他特殊字符,在 Flutter 中也可以借此來(lái)進(jìn)行格式限制,包括正則表達(dá)式;使用時(shí)需要引入 package:flutter/services.dart;

a. LengthLimitingTextInputFormatter 限制最長(zhǎng)字符;

b. WhitelistingTextInputFormatter 僅允許輸入白名單中字符;如 digitsOnly 僅支持?jǐn)?shù)字 [0-9];

c. BlacklistingTextInputFormatter 防止輸入黑名單中字符;如 singleLineFormatter 強(qiáng)制輸入單行;

分析源碼 RegExp("[/]") 可以設(shè)置正則表達(dá)式;

17、onChanged 文本內(nèi)容變更時(shí)回調(diào),可實(shí)時(shí)監(jiān)聽(tīng) TextField 輸入內(nèi)容;

18、controller 文本控制器,監(jiān)聽(tīng)輸入內(nèi)容回調(diào);

19、onTap 點(diǎn)擊 TextField時(shí)回調(diào);

20、onEditingComplete 在提交內(nèi)容時(shí)回調(diào),通常是點(diǎn)擊回車(chē)按鍵時(shí)回調(diào);

21、onSubmit 在提交時(shí)回調(diào),不可與 onEditingComplete 同時(shí)使用,區(qū)別在于 onSubmit 是帶返回值的回調(diào);

問(wèn)題小結(jié):

當(dāng) TextField 設(shè)置 enableInteractiveSelection 屬性后長(zhǎng)按會(huì)出現(xiàn)菜單,默認(rèn)為英文,可通過(guò)設(shè)置 Flutter 國(guó)際化來(lái)處理;

(1)在 pubspec.yaml 中集成 flutter_localizations;

2)在 MaterialApp 中設(shè)置本地化代理和支持的語(yǔ)言類(lèi)型;

(1)將 maxLength 設(shè)置為 null 僅使用 LengthLimitingTextInputFormatter 限制最長(zhǎng)字符;

(2)設(shè)置 InputDecoration 中 decoration 屬性為空;但是底部有空余,只是隱藏而并非消失;

標(biāo)題名稱:flutter多行,flutter多語(yǔ)言切換
URL網(wǎng)址:http://muchs.cn/article36/phispg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站建設(shè)、品牌網(wǎng)站制作、自適應(yīng)網(wǎng)站網(wǎng)站維護(hù)、手機(jī)網(wǎng)站建設(shè)、網(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)

成都app開(kāi)發(fā)公司