1.webview_flutter
讓客戶滿意是我們工作的目標,不斷超越客戶的期望值來自于我們對這個行業(yè)的熱愛。我們立志把好的技術(shù)通過有效、簡單的方式提供給客戶,將通過不懈努力成為客戶在信息化領(lǐng)域值得信任、有價值的長期合作伙伴,公司提供的服務(wù)項目有:域名注冊、網(wǎng)絡(luò)空間、營銷軟件、網(wǎng)站建設(shè)、橫峰網(wǎng)站維護、網(wǎng)站推廣。
2.flutter_inappwebview
3.flutter_webview_plugin
筆者最近發(fā)現(xiàn)webview_flutter在Android端嵌套帶有較長的Webview頁面時偶歐會存在卡頓問題表現(xiàn)為加速向下滑動到頁面底部,然后從底部慢慢像上滑就不起作用了,體驗很不好,經(jīng)過一天的排查和實驗發(fā)現(xiàn)是webview_flutter插件自己的問題,用原生嵌套WebView并沒有問題,后來改成flutter_webview_plugin問題可以解決,但是flutter_webview_plugin插件并不是基于flutter渲染的并不能在嵌套webview的頁面自定義flutter樣式層,后來發(fā)現(xiàn)使用flutter_inappwebview插件能夠完美解決問題。推薦你們用flutter_inappwebview。
相對于iOS開發(fā),F(xiàn)lutter的布局更具有靈活性,每個頁面設(shè)計都不一樣,相同頁面可選擇的布局方式也不一樣,如果單純的說應(yīng)該如何去布局,我覺得不現(xiàn)實,大家可以參考下 Flutter官方的布局教程 。接下來,筆者,通過項目中的一個頁面,來一步一步的拆解布局的流程。整個過程,基本上按照拆解、組件封裝、具體布局這三步來的。
根據(jù)設(shè)計圖,可以看出整體可以分成兩部分,上面一部分是系統(tǒng)介紹模塊,下面一部分是真正的登錄內(nèi)容,因為涉及到疊加,因此考慮用Stack;
系統(tǒng)介紹模塊部分:整體也是涉及到疊加,考慮用Stack,分為四部分。最底部漸變色背景用一個contanier,無須指定位置,全視圖擴展;載放logo圖標在上一層,用Image。最后兩個Text同級放在最上層。Image,Text各用Positioned包裹去指定位置。
登錄內(nèi)容模塊是最外層是一個Contanier容器,去控制背景色和圓角。然后是一個Column元素,逐行排列。
第一行為Image,
第二行為Text,
第三行可以看成一個小Column,分兩塊進行布局
第四行可以看成一個小Column,分兩塊進行布局
第五行可以看作一個TextButton,
第六行可以看作一個Row,分三塊進行布局
通過上面這樣一步一步的分析后,基本上對大致的布局有了一個了解,最外層的控件大致選對(只要能實現(xiàn)的話,就是復(fù)雜度以及效率的問題),然后一步一步的拆解每一行的元素,如果有重復(fù)的或者覺得可以封裝出來的部分,則進行下一步。
每一行的拆解,大致也是按照這個思路來進行,因此筆者在這里就不做講解了。
在做到第三第四行的時候,發(fā)現(xiàn)這兩個很相似,而且設(shè)計到一些交互邏輯,筆者就想對第三第四行的這種展示進行封裝,覺得今后的布局可能會用到,因此在這一步,可以先把這一塊兒抽離出一個控件。利用TextField來實現(xiàn)這種輸入操作,具體的實現(xiàn)筆者不再詳細的描述了。
經(jīng)過這一步,整體的規(guī)劃設(shè)計圖已經(jīng)有了,各個組件也都有了,接下來的工作就是組裝了。
具體布局設(shè)計到一些細節(jié)的地方,例如整體Column的居中對齊(crossAxisAlignment)、間隔(Padding或Container包裹,筆者更喜歡用SizedBox占位)、居左居右居中(Align)、點擊事件(GestureDetector)以及圓角(BorderRadius)等一些特殊情況。
像第六行row是放在底部的,就可以在第六行前面增加一個Spacer()去填充空白區(qū)域。
對文字顏色大小等,可以用TextStyle直接設(shè)置。
對于輸入框的刪除按鈕,可以用Offstage這種Flutter特有的控制顯示隱藏的控件。
當我們同時為手機和平板適配編寫 app 針對不同屏幕尺寸進行 UI 布局或當用戶偏好設(shè)置較大字號或是想要最大限度等減少動畫等;此時就需要 MediaQuery 來幫我們獲取所用設(shè)備的信息以及用戶設(shè)置的偏好信息;
MediaQuery 一直存在于 WidgetsApp 和 MaterialApp 中, MediaQuery 繼承自 InheritedWidget 是一個單獨的 Widget ,但一般通過 MediaQuery.of(context) 來獲取相關(guān)信息;
當相關(guān)信息發(fā)生變化,例如屏幕旋轉(zhuǎn)等時,屏幕中 Widget 會重新構(gòu)建,以保持最新狀態(tài);我們可以通過 MediaQuery 構(gòu)造函數(shù)和提供的靜態(tài)方法手動設(shè)置對應(yīng)的相關(guān)信息;
MediaQueryData 包含關(guān)于媒介的相關(guān)信息;一般通過 MediaQuery.of(context) 獲取;
size 為媒介的尺寸大小,以邏輯像素為單位;
devicePixelRatio 為像素密度;與設(shè)備物理像素有關(guān),與橫豎屏等無關(guān);
orientation 為橫豎屏, Orientation.landscape 為橫屏, Orientation.portrait 為豎屏;
textScaleFactor 為
每個邏輯像素的字體像素數(shù),小菜理解為字體的像素比;注意,小菜設(shè)置了默認字體像素密度為標準的 1.2 倍之后調(diào)整設(shè)備系統(tǒng)字號,其 1.2 倍依舊是以標準字號為基礎(chǔ)擴大 1.2 倍;
platformBrightness 為當前設(shè)備的亮度模式;注意調(diào)整屏幕亮度并不會改變該模式,與當前系統(tǒng)支持的黑暗模式和明亮模式相關(guān);
alwaysUse24HourFormat 為當前設(shè)備是否為 24 小時制;
accessibleNavigation 為是否使用 TalkBack 或 VoiceOver 之類的輔助功能與應(yīng)用程序進行交互,用以輔助視力障礙人群;
invertColors 為是否使用顏色反轉(zhuǎn),主要用于 iOS 設(shè)備;
highContrast 為用戶是否要求前景與背景之間的對比度高,主要用于 iOS 設(shè)備;
disableAnimations 為平臺是否要求禁用或減少動畫;
boldText 為平臺是否要求使用粗體;
padding 為屏幕內(nèi)邊距,一般是劉海兒屏或異形屏中被系統(tǒng)遮擋部分邊距;
viewInsets 為鍵盤彈出時等遮擋屏幕邊距,其中 viewInsets.bottom 為鍵盤高度;
systemGestureInsets 為手勢邊距,如 Android Q 之后添加的向左滑動關(guān)閉頁面等;
viewPadding 小菜理解為視圖內(nèi)邊距,為屏幕被劉海兒屏或異形屏中被系統(tǒng)遮擋部分,從 MediaQuery 邊界的邊緣計算;此值是保持不變;例如,屏幕底部的軟件鍵盤可能會覆蓋并占用需要底部填充的相同區(qū)域,因此不會影響此值;
physicalDepth 為設(shè)備物理層級,小菜暫時還未想到對應(yīng)的應(yīng)用場景;
小菜在嘗試獲取其他子 Widget Size 時,有兩點需要注意,首先要設(shè)置一個全局的 GlobalKey 來獲取當前位置, key 需要為唯一的;第二通過 GlobalKey().currentContext 獲取 BuildContext 上下文環(huán)境,從而獲取對應(yīng)尺寸;
MediaQuery 案例嘗試
小菜對于部分 MediaQueryData 的應(yīng)用和理解還不夠深入;如有錯誤請多多指導!
在Scaffold中加入這一行 resizeToAvoidBottomPadding:false
網(wǎng)上有這個方法SystemChrome.setEnabledSystemUIOverlays([]); 去除頂部和底部,但是在小米4平板上底部還是有灰色的高度,加上上邊的方法就好了?
我要做的是用BottomNavigationBarItem移除/替換FAB(浮動操作按鈕),并將其放在BottomNavigationBar的中心,并為其創(chuàng)建樣式。
為了按鈕能夠根據(jù)屏幕寬度進行延伸變寬,用了row和expanded,expanded多大面積,按鈕就有多大面積。如果不用row,expanded會向下延伸,就不是我們要的效果了。
OutlineButton控件的child和onPressed是必須的屬性,borderSide用來自定義邊框顏色和樣式。
網(wǎng)站名稱:flutter底部凸起,flutter頂部彈窗
URL鏈接:http://aaarwkj.com/article14/dssjgge.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)頁設(shè)計公司、網(wǎng)站收錄、做網(wǎng)站、服務(wù)器托管、、小程序開發(fā)
聲明:本網(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)