bl双性强迫侵犯h_国产在线观看人成激情视频_蜜芽188_被诱拐的少孩全彩啪啪漫画

flutter亮度感應,flutter 屏幕常亮

Flutter視頻播放器,簡潔!

注:亮度調節和音量調節gif無法體現,功能是ok的,其次默認Icon鎖的close和open實在難以分辨。

天水網站制作公司哪家好,找創新互聯!從網頁設計、網站建設、微信開發、APP開發、成都響應式網站建設公司等網站項目制作,到程序開發,運營維護。創新互聯從2013年創立到現在10年的時間,我們擁有了豐富的建站經驗和運維經驗,來保證我們的工作的順利進行。專注于網站建設就選創新互聯。

環境:Flutter 2.8.1 channel stable ;Dart 2.15.1

需要音頻播放器的看這里: Flutter音樂播放器

重點說下這個工具類,因為視頻播放,涉及到狀態改變有很多,筆者剛開始選擇使用 InheritedWidget 來在眾多的widget之間共享數據。但是總感覺這樣有點繁瑣,且不很優雅!

這里非廣告,如果是使用 GetX 就很簡單了,筆者也使用了 GetX 進行封裝了,一瀉千里的趕腳!,但是筆者還是那句話:剛開始接觸Flutter的開發者不是很建議使用 GetX ,可以先熟悉下Flutter狀態管理的基礎原理再行使用。而且為了盡量簡潔,還是不引入其他的第三方了。

我們選擇對第三方插件進行封裝的目的不外乎這幾個:

于是筆者就寫了一個工具類 VideoPlayerUtils ,專門且只用來處理播放器的所有業務。包括暫停、播放、跳轉、調節音量、調節亮度、切換視頻等操作。在所有的widget中不會引用關于 video_player 或其他第三方插件的任何信息, VideoPlayerUtils 負責widget與播放器之間的所有操作交互。后續優化迭代或更換播放器插件時,只需針對這個工具類進行修改,對所有widget不會有任何的影響,大大的解耦合了。

其中 VideoPlayerState :

提供以上的公共屬性,可以通過 VideoPlayerUtils 來獲取對應的值,使用 get 只讀,使外界不會誤修改這些屬性,以保證數值的安全性。開發者可根據自身需要自行添加屬性。

提供以上方法來處理播放器的所有業務。同樣的開發者可根據自身需要自行添加或修改。

重點說下這個方法,是整個業務的核心方法,控制視頻的播放或暫停。開發者只要遇到播放或暫停是均可調用此方法,具體是播放或暫停,內部根據傳入的 url 自行判斷,開發者不需要關心。

切換新視頻也是使用此方法,傳入的 url 與上次不一致,自動切換新視頻。筆者可根據 statusListener 來監聽播放狀態的改變,以此處理自身邏輯。

這個也需要提下,視頻播放器在播放新視頻時會異步初始化,一般我們的操作是在 initState() 初始化,成功后再 setState() 。這里筆者遇到一個讓人蛋疼的問題:

我們看 video_player 的使用:

VideoPlayer(controller) :widget中已經持有了controller。本來筆者封裝的目的就是為了讓widget與controller的之間解耦合。但此時的筆者。。。。

放棄不是不可能放棄的,這輩子都不會放棄的!

于是筆者取了巧,寫了一個初始化監聽器 initializedListener ,包換2個參數: bool,Widget ,初始化是否成功;其中widget為初始化成功返回需要展示的播放器UI,失敗默認返回 const SizedBox() 。

到這里就可以簡單使用了:

沒看錯,視頻播放就是這么簡單。

如果有更多的業務功能,筆者也按照自己的需求寫了一套,同樣的開發者可根據自身需要自行添加或修改。

VideoPlayerGestures 主要是處理手勢的,比如快進、快退等跳轉播放;左側上下滑動調節亮度;右側上下滑動調節音量;單擊是否開啟沉浸式播放,所有widget的隱藏與顯示;雙擊播放、暫停等。

哦,還有 PercentageWidget 也放到這個文件下了,就是這玩意:

因為顯示的百分比與手勢相關,隨著手勢移動而更新。開發者可自行處理。

筆者處出于簡單考慮,就按照整個UI的位置命名了。瞅一眼就知道是啥玩意。

同樣的開發者可根據自身需要自行添加或修改。

就是這玩意:

同樣的開發者可根據自身需要自行添加或修改。話說這個鎖的 Icon 的open和close是真的難分辨!

就是這玩意:

同樣的開發者可根據自身需要自行添加或修改。

這玩意是自定義的,別問,問就是跟產品干一架落了下風

主要就是自定義這玩意:

同樣的開發者可根據自身需要自定義。

注:這里沒有添加緩沖的進度,開發可查看 video_player 中的源碼 VideoProgressIndicator ,按業務自行定義。

這玩意就是整合以上的widget,再考慮下全屏的安全區域,沒啥東西。開發者可自行處理!

具體的實現監聽器的思路, 看這里 。

自此一個漂亮的Flutter視頻播放器就已經結束了。如果您覺得對您有些許幫助的話,歡迎 Star !

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

源碼分析:

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

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

2、textAlign 為文字起始位置,可根據業務光標居左/居右/居中等;注意只是文字開始方向;textDirection 問文字內容方向,從左向右或從右向左;

3、maxLength 為字符長度,設置時默認是展示一行,且右下角有編輯長度與整體長度對比;與 maxLengthEnforced 配合,maxLengthEnforced 為 true 時達到最大字符長度后不可編輯;為 false 時可繼續編輯展示有差別;

4、設置 maxLength 之后右下角默認有字符計數器,設置 TextField.noMaxLength 即可只展示輸入字符數;

5、maxLines 為允許展現的最大行數,在使用 maxLength 時內容超過一行不會自動換行,因為默認 maxLines=1,此時設置為 null 或固定展示行數即可自動換行;區別在于 null 會展示多行,而 maxLines 最多只展示到設置行數;

6、obscureText 是否隱藏編輯內容,常見的密碼格式;

7、enableInteractiveSelection 長按是否出現【剪切/復制/粘貼】菜單;不可為空;

8、keyboardAppearance 為鍵盤亮度,包括 Brightness.dark/light 兩種,但僅限于 iOS 設備;

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

10、keyboardType 為鍵盤類型,和尚理解整體分為數字鍵盤和字母鍵盤等;根據設置的鍵盤類型,鍵盤會有差別;

a. 數字鍵盤

--1-- datetime 鍵盤上可隨時訪問 : 和 /;

--2-- phone 鍵盤上可隨時訪問 # 和 *;

--3-- number 鍵盤上可隨時訪問 + - * /

b. 字母鍵盤

--1-- emailAddress 鍵盤上可隨時訪問 @ 和 .;

--2-- url 鍵盤上可隨時訪問 / 和 .;

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

--4-- text 默認字母鍵盤;

11、textInputAction 通常為鍵盤右下角操作類型,類型眾多,建議多多嘗試;

12、autofocus 是否自動獲取焦點,進入頁面優先獲取焦點,并彈出鍵盤,若頁面中有多個 TextField 設置 autofocus 為 true 則優先獲取第一個焦點;

13、focusNode 手動獲取焦點,可配合鍵盤輸入等減少用戶操作次數,直接獲取下一個 TextField 焦點;

14、enabled 設為 false 之后 TextField 為不可編輯狀態;

15、decoration 為邊框修飾,可以借此來調整 TextField 展示效果;可以設置前置圖標,后置圖片,邊框屬性,內容屬性等,會在后續集中嘗試;若要完全刪除裝飾,將 decoration 設置為空即可;

16、inputFormatters 為格式驗證,例如原生 Android 中通常會限制輸入手機號或其他特殊字符,在 Flutter 中也可以借此來進行格式限制,包括正則表達式;使用時需要引入 package:flutter/services.dart;

a. LengthLimitingTextInputFormatter 限制最長字符;

b. WhitelistingTextInputFormatter 僅允許輸入白名單中字符;如 digitsOnly 僅支持數字 [0-9];

c. BlacklistingTextInputFormatter 防止輸入黑名單中字符;如 singleLineFormatter 強制輸入單行;

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

17、onChanged 文本內容變更時回調,可實時監聽 TextField 輸入內容;

18、controller 文本控制器,監聽輸入內容回調;

19、onTap 點擊 TextField時回調;

20、onEditingComplete 在提交內容時回調,通常是點擊回車按鍵時回調;

21、onSubmit 在提交時回調,不可與 onEditingComplete 同時使用,區別在于 onSubmit 是帶返回值的回調;

問題小結:

當 TextField 設置 enableInteractiveSelection 屬性后長按會出現菜單,默認為英文,可通過設置 Flutter 國際化來處理;

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

2)在 MaterialApp 中設置本地化代理和支持的語言類型;

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

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

Flutter 94: 初識 MediaQuery

當我們同時為手機和平板適配編寫 app 針對不同屏幕尺寸進行 UI 布局或當用戶偏好設置較大字號或是想要最大限度等減少動畫等;此時就需要 MediaQuery 來幫我們獲取所用設備的信息以及用戶設置的偏好信息;

MediaQuery 一直存在于 WidgetsApp 和 MaterialApp 中, MediaQuery 繼承自 InheritedWidget 是一個單獨的 Widget ,但一般通過 MediaQuery.of(context) 來獲取相關信息;

當相關信息發生變化,例如屏幕旋轉等時,屏幕中 Widget 會重新構建,以保持最新狀態;我們可以通過 MediaQuery 構造函數和提供的靜態方法手動設置對應的相關信息;

MediaQueryData 包含關于媒介的相關信息;一般通過 MediaQuery.of(context) 獲取;

size 為媒介的尺寸大小,以邏輯像素為單位;

devicePixelRatio 為像素密度;與設備物理像素有關,與橫豎屏等無關;

orientation 為橫豎屏, Orientation.landscape 為橫屏, Orientation.portrait 為豎屏;

textScaleFactor 為

每個邏輯像素的字體像素數,小菜理解為字體的像素比;注意,小菜設置了默認字體像素密度為標準的 1.2 倍之后調整設備系統字號,其 1.2 倍依舊是以標準字號為基礎擴大 1.2 倍;

platformBrightness 為當前設備的亮度模式;注意調整屏幕亮度并不會改變該模式,與當前系統支持的黑暗模式和明亮模式相關;

alwaysUse24HourFormat 為當前設備是否為 24 小時制;

accessibleNavigation 為是否使用 TalkBack 或 VoiceOver 之類的輔助功能與應用程序進行交互,用以輔助視力障礙人群;

invertColors 為是否使用顏色反轉,主要用于 iOS 設備;

highContrast 為用戶是否要求前景與背景之間的對比度高,主要用于 iOS 設備;

disableAnimations 為平臺是否要求禁用或減少動畫;

boldText 為平臺是否要求使用粗體;

padding 為屏幕內邊距,一般是劉海兒屏或異形屏中被系統遮擋部分邊距;

viewInsets 為鍵盤彈出時等遮擋屏幕邊距,其中 viewInsets.bottom 為鍵盤高度;

systemGestureInsets 為手勢邊距,如 Android Q 之后添加的向左滑動關閉頁面等;

viewPadding 小菜理解為視圖內邊距,為屏幕被劉海兒屏或異形屏中被系統遮擋部分,從 MediaQuery 邊界的邊緣計算;此值是保持不變;例如,屏幕底部的軟件鍵盤可能會覆蓋并占用需要底部填充的相同區域,因此不會影響此值;

physicalDepth 為設備物理層級,小菜暫時還未想到對應的應用場景;

小菜在嘗試獲取其他子 Widget Size 時,有兩點需要注意,首先要設置一個全局的 GlobalKey 來獲取當前位置, key 需要為唯一的;第二通過 GlobalKey().currentContext 獲取 BuildContext 上下文環境,從而獲取對應尺寸;

MediaQuery 案例嘗試

小菜對于部分 MediaQueryData 的應用和理解還不夠深入;如有錯誤請多多指導!

文章標題:flutter亮度感應,flutter 屏幕常亮
路徑分享:http://vcdvsql.cn/article6/dsdggig.html

成都網站建設公司_創新互聯,為您提供外貿建站網站導航小程序開發網站制作全網營銷推廣外貿網站建設

廣告

聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯

微信小程序開發