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

flutterkey,flutter可以寫網頁嗎

Flutter 94: 初識 MediaQuery

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

成都創新互聯公司是一家專業提供水城企業網站建設,專注與成都網站制作、做網站、HTML5建站、小程序制作等業務。10年已為水城眾多企業、政府機構等服務。創新互聯專業網絡公司優惠進行中。

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 簽名和獲取應用簽名

簽名:

keytool -genkey -v -keystore ~/key.jks -keyalg RSA -keysize 2048 -validity 10000 -alias key

【~/key.jks】生成文件的路徑和文件名

keytool -importkeystore -srckeystore C:/test/key.jks -destkeystore C:/test/key.jks -deststoretype pkcs12

遷移到行業標準格式 PKCS12

在project/android下創建key.properties文件

文件內容

在Projects\android\app\build.gradle里的 android{ 上邊添加

def keystorePropertiesFile = rootProject.file("key.properties")

def keystoreProperties =new Properties()

keystoreProperties.load(new FileInputStream(keystorePropertiesFile))

android{

buildTypes{

release{

? ? signingConfig signingConfigs.release

}

}

修改成

signingConfigs{

release{

? ? keyAlias keystoreProperties['keyAlias']

? ? keyPassword keystoreProperties['keyPassword']

? ? storeFile file(keystoreProperties['storeFile'])

? ? storePassword keystoreProperties['storePassword']

}

}

buildTypes{

release{

? ? signingConfig signingConfigs.release

}

}

之后在執行 flutter build apk打包就簽名了。

在有簽名文件的情況下獲取應用簽名:

keytool -list -v -keystore 簽名文件路徑

MD5就是文件簽名:復制出來去掉:就可以使用了。

Widget總結

Flutter中Widget,State和BuildContext的概念是每個Flutter開發人員需要完全理解的最重要概念之一。這里先講解一下Widget以及Widget。三者之間的關系會在最后一篇總結一下。

Widget類在Flutter中是非常重要的,繼承自Widget類的有PreferredSizeWidget、ProxyWidget、RenderObjectWidget、StatefulWidget、StatelessWidget。我們日常使用的絕大部分widget都是繼承自Widget類,查看Widget類源碼,內部實現非常簡單,構造函數如下:

在flutter中構建APP是由widget樹構建起來的,所以這個key的作用是用來控制在widget樹中替換widget的時候使用的。其中Key類是Widget、Element以及SemanticsNode的唯一標識符,繼承自Key的還有LocalKey以及GlobalKey。詳細可以去framework.dart文件查看相關源碼及說明。

在Flutter中,我們平時自定義的widget,一般都是繼承自StatefulWidget或StatelessWidget(并不是只有這兩種),這兩種widget也是目前最常用的兩種。如果一個控件自身狀態不會去改變,創建了就直接顯示,不會有色值、大小或者其他屬性的變化,這種widget一般都是繼承自StatelessWidget,常見的有Container、ScrollView等。如果一個控件需要動態的去改變或者相應一些狀態,例如點擊態、色值、內容區域等,那么一般都是繼承自StatefulWidget,常見的有CheckBox、AppBar、TabBar等。兩者的差別在于是否有狀態。

對于StatelessWidget,build方法會在如下三種情況下調用:

我們在創建State的時候可以看到和StatefulWidget相似的build方法,也就是說我們也可以獲得一個BuildContext,在使用StatefulWidget.createState創建它們之前以及在調用initState之前,框架將State對象與BuildContext關聯起來,該關聯是永久的:State對象永遠不會改變它的BuildContext(但是BuildContext本身可以在控件樹中移動)。后面講解一下這個BuildContext對象在整個程序中什么角色

State的作用有兩點:

State的生命周期有四種狀態:

完整生命周期如下:

當控件的配置被更改時會調用State.didUpdateWidget方法,此時框架會重新繪制控件。你也可以使用State.setState方法在狀態發生變化時通知框架,告訴框架該對象的內部狀態已經改變,框架接到通知后也會重新繪制控件。

State中比較重要的一個方法是setState,當修改狀態時,widget會被更新。比方說點擊CheckBox,會出現選中和非選中狀態之間的切換,就是通過修改狀態來達到的。查看setState源碼,在一些異常的情況下將會拋出異常:

markNeedsBuild內部,則是通過標記element為diry,在下一幀的時候重建(rebuild)??梢钥闯鰏etState并不是立即生效,它只是將widget進行了標記,真正的rebuild操作,則是等到下一幀的時候才會去進行。

StatefulWidget的兩個主要類別:

在我的小部件的生命周期中,我是否需要考慮一個將要更改的變量,何時更改,將強制重建小部件?

如果問題的答案是肯定的,那么您需要一個有狀態的小部件,否則,您需要一個無狀態小部件。

比如:

Flutter 中widget key的作用

3.在 StatelessWidget 中,因為不可變,element 的值沒有報存在element中,所以update也不會改變原有界面。

在 StatefulWidget 中,值保存在_State,如果沒有標記key。則當更新界面時,會重新調用 Widget build(BuildContext context) 方法。此時,widget 賦值會從頭開始從element中拿取數據,放入widget。當刪除為【widget[0]】時,就會出現element中數據和widget不一致。 此時就需要key,來進行特殊標識,達到 element 和 widget 一一對應的作用。

Flutter真香,我用它寫了個桌面版JSON解析工具

Flutter支持穩定的桌面設備開發已經一段時間了,不得不說,Flutter多平臺支持的特性真的很香。我本人并沒有任何桌面開發的經驗,但仍然使用Flutter開發出了一個桌面版小程序,功能很簡單,就是對輸入的json做格式化處理和轉模型。

話不多說,先來看看實際效果。 項目源碼地址

開發環境如下:

Flutter : 2.8.1

Dart : 2.15.1

IDE : VSCode

JSON作為我們日常開發工作中經常要打交道的一種數據格式,它共有6種數據類型: null , num , string , object , array , bool 。我們勢必對它又愛又恨。愛他因為他作為數據處理的一種格式確實非常方便簡潔。但是在我們做Flutter開發中,又需要接觸到json解析時,就會感覺非常棘手,因為flutter沒有反射,導致json轉模型這塊需要手寫那繁雜的映射關系。就像下面這樣子。

數據量少還能接受,一旦量大,那么光手寫這個解析方法都能讓你懷疑人生。更何況手寫還有出錯的可能。好在官方有個工具**json_serializable**可以自動生成這塊轉換代碼,也解決了flutter界json轉模型的空缺。當然,業界也有專門解析json的網站,可以自動生成dart代碼,使用者在生成后復制進項目中即可,也是非常方便的。

本項目以json解析為切入點,和大家一起來看下flutter是如何開發桌面應用的。

要讓我們的flutter項目支持桌面設備。我們首先需要修改下flutter的設置。如下,讓我們的項目支持 windows 和 macos 系統。

接下來使用 flutter create 命令創建我們的模版工程。

創建完項目后,我們就可以 run 起來了。

先來看下整體界面,界面四塊,分別為功能模塊、文件選擇模塊、輸入模塊、輸出模塊。

我們在新建一個桌面應用時,默認的模版又一個Appbar,此時應用可以用鼠標拖拽移動,放大縮小,還可以縮到很小。但是,我們一旦去掉這個導航欄,那么窗口就不能用鼠標拖動了,并且我們往往不希望用戶將我們的窗口縮放的很小,這會導致頁面異常,一些重要信息都展示不全。因此這里需要借助第三方組件 bitsdojo_window 。通過 bitsdojo_window ,我們可以實現窗口的定制化,拖動,最小尺寸,最大尺寸,窗口邊框,窗口頂部放大、縮小、關閉的按鈕等。

通過 InkWell 組件,可以捕捉到手勢、鼠標、觸控筆的移動和停留位置

這個功能是鼠標移動后的UI交互界面。要在窗口上顯示一個提示框,可以使用 Overlay 。需要注意的是,由于在 Overlay 上的 text 的根結點不是 Material 風格的組件,因此會出現黃色的下劃線。因此一定要用 Material 包一下 text 。并且你必須給創建的 OverlayEntry 一個位置,否則它將全屏顯示。

讀取說表拖拽的文件一開始想嘗試使用 InkWell 組件,但是這個組件無法識別拖拽中的鼠標,并且也無法從中拿到文件信息。因此放棄。后來從文章《Flutter-2天寫個桌面端APP》中發現一個可讀取拖拽文件的組件 desktop_drop ,能滿足要求。

使用開源組件 file_picker ,選完圖片后的操作和拖拽選擇圖片后的操作一致。

Textfield 如果要顯示富文本,那么需要自定義 TextEditingController 。并重寫 buildTextSpan 方法。

在做導出功能時遇到下列報錯,保存提示為沒有權限訪問對應目錄下的文件。

通過Apple的開發文檔找到有關權限問題的說明。其中有個授權私鑰的key為 com.apple.security.files.downloads.read-write ,表示 對用戶的下載文件夾的讀/寫訪問權限 。那么,使用Xcode打開Flutter項目中的mac應用,修改工程目錄下的 DebugProfile.entitlements 文件,向 entitlements 文件中添加 com.apple.security.files.downloads.read-write ,并將值設置為YES,保存后重啟Flutter項目。發現已經可以向下載目錄中讀寫文件了。

當然,這是正常操作。還有個騷操作就是關閉系統的沙盒機制。將 entitlements 文件的 App Sandbox 設置為NO。這樣我們就可以訪問任意路徑了。當然關閉應用的沙盒也就相當于關閉了應用的防護機制,因此這個選項慎用。

原文地址:

flutter-動畫

1.動畫原理:在一段時間內快速的多次改變UI外觀,由于人眼會產生視覺暫留所以最終看到的就是一個連續的動畫。

UI的一次改變稱為一個動畫幀,對應一次屏幕刷新。

FPS:幀率,每秒的動畫幀數。

flutter動畫分為兩類:

常見動畫模式:

是一個抽象類,主要的功能是保存動畫的值和狀態。常用的一個Animation類是Animation double ,是一個在一段時間內依次生成一個區間之間的值的類,可以是線性或者曲線或者其他。

可以生成除double之外的其他類型值,如:Animation Color 或 Animation Size 。

是一個動畫控制器,控制動畫的播放狀態,在屏幕刷新的每一幀,就會生成一個新的值。

包含動畫的啟動forward()、停止stop() 、反向播放 reverse()等方法,在給定的時間段內線性的生成從0.0到1.0(默認區間)的數字。

curve:描述動畫的曲線過程。

curvedAnimation:指定動畫的曲線。

常用Curve:

繼承自Animatable T ,表示的就是一個 Animation 對象的取值范圍,只需要設置開始和結束的邊界值(值也支持泛型)。 它唯一的工作就是定義輸入范圍到輸出范圍的映射。

例如,Tween可能會生成從紅到藍之間的色值,或者從0到255。

Tween.animate:返回一個Animation。

映射過程:

1). Tween.animation通過傳入 aniamtionController 獲得一個_AnimatedEvaluation 類型的 animation 對象(基類為 Animation), 并且將 aniamtionController 和 Tween 對象傳入了 _AnimatedEvaluation 對象。

2). animation.value方法即是調用 _evaluatable.evaluate(parent)方法, 而 _evaluatable 和 parent 分別為 Tween 對象和 AnimationController 對象。

3). 這里的 animation 其實就是前面的 AnimationController 對象, transform 方法里面的 animation.value則就是 AnimationController 線性生成的 0.0~1.0 直接的值。 在 lerp 方法里面我們可以看到這個 0.0~1.0 的值被映射到了 begin 和 end 范圍內了。

接收一個TickerProvider類型的對象,它的主要職責是創建Ticker。

防止屏幕外動畫消耗資源。

[圖片上傳失敗...(image-115b94-1636441483468)]

過程:

回調:

不使用addListener()和setState()來給widget添加動畫。

使用AnimatedWidget,將widget分離出來,創建一個可重用動畫的widget,AnimatedWidget中會自動調用addListener()和setState()

AnimatedModalBarrier、DecoratedBoxTransition、FadeTransition、PositionedTransition、RelativePositionedTransition、RotationTransition、ScaleTransition、SizeTransition、SlideTransition

如何渲染過渡,把渲染過程也抽象出來:

AnimatedBuilder的示例包括: BottomSheet、 PopupMenu、ProgressIndicator、RefreshIndicator、Scaffold、SnackBar、TabBar。

MaterialPageRoute:平臺風格一致的路由切換動畫

CupertinoPageRoute:左右切換風格

自定義:PageRouteBuilder

1.要創建交織動畫,需要使用多個動畫對象(Animation)。

2.一個AnimationController控制所有的動畫對象。

3.給每一個動畫對象指定時間間隔(Interval)

可以同時對其新、舊子元素添加顯示、隱藏動畫.

當AnimatedSwitcher的child發生變化時(類型或Key不同),舊child會執行隱藏動畫,新child會執行執行顯示動畫。

希望大家支持一下,感謝

當前文章:flutterkey,flutter可以寫網頁嗎
本文路徑:http://vcdvsql.cn/article36/dsdgipg.html

成都網站建設公司_創新互聯,為您提供品牌網站制作云服務器、電子商務、網站建設網站收錄響應式網站

廣告

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

h5響應式網站建設