flutter web有三種渲染模式,auto 、html 和 canvaskit。

我們提供的服務有:成都網(wǎng)站設計、成都做網(wǎng)站、外貿(mào)網(wǎng)站建設、微信公眾號開發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認證、雞東ssl等。為上千企事業(yè)單位解決了網(wǎng)站和推廣的問題。提供周到的售前咨詢和貼心的售后服務,是有科學管理、有技術(shù)的雞東網(wǎng)站制作公司
flutter build web命令默認的渲染模式為auto,這種模式在移動端使用html渲染,在pc端使用canvaskit渲染。
目前我的flutter版本是2.5.2,pc端瀏覽器使用canvaskit渲染時中文會出現(xiàn)短暫的亂碼(方塊叉號),像這樣:
我們可以指定渲染模式為html,就不會有這個問題了,命令如下:
指定渲染模式為canvaskit的命令為:
2021.10.21:flutter web對中文的支持貌似不太好,在手機瀏覽器調(diào)試web項目時,textfield hinttext有中文輸入會有卡頓bug
網(wǎng)站:
Flutter官網(wǎng)
國內(nèi)Flutter中文資源網(wǎng)
Flutter中文網(wǎng)
Dart官網(wǎng)
Dart中文網(wǎng)
第三方包官網(wǎng)
國內(nèi)第三方包官網(wǎng)
必讀書籍:
《Dart語言實戰(zhàn):基于Angular框架的Web開發(fā)》
《Flutter實戰(zhàn)》
在以前的 《Flutter 上默認的文本和字體知識點》 和 《帶你深入理解 Flutter 中的字體“冷”知識》 中,已經(jīng)介紹了很多 Flutter 上關(guān)于字體有趣的知識點,而本篇講繼續(xù)介紹 Flutter 上關(guān)于 Text 的一個屬性: FontFeature , 事實上相較于 Flutter ,本篇內(nèi)容可能和前端或者設計關(guān)系更密切 。
什么是 FontFeature ? 簡單來說就是影響字體形狀的一個屬性 ,在前端的對應領(lǐng)域里應該是 font-feature-settings ,它有別于 FontFamily ,是用于指定字體內(nèi)字的形狀的一個參數(shù)。
我們知道 Flutter 默認在 Android 上使用的是 Roboto 字體,而在 iOS 上使用的是 SF 字體,但是其實 Roboto 字體也是分很多類型的,比如你去查閱手機的 system/fonts 目錄,就會發(fā)現(xiàn)很多帶有 Roboto 字樣的字體庫存在。
所以 Roboto 之類的字體庫是一個很大的字體集,不同的 font-weight 其實對應著不同的 ttf ,例如默認情況下的 Roboto 是不支持 font-weight 為 600 的配置 :
所以如下圖所示,如果我們設置了 w400 - w700 的 weight ,可以很明顯看到中間的 500 和 600 其實是一樣的粗細,所以在 設置 weight 或者設計 UI 時,就需要考慮不同平臺上的 weight 是否支持想要的效果 。
回歸到 FontFeature 上,那 Roboto 自己默認支持多少種 features 呢? 答案是 26 種,它們的編碼如下所示,運行后效果也如下圖所示,從日常使用上看,這 26 種 Feature 基本滿足開發(fā)的大部分需求。
而 iOS 上的 SF pro 默認支持 39 種 Features , 它們的編碼如下所示,運行后效果也如下圖所示,可以看到 SF pro 支持的 Features 更多。
所以可以看到,并不是所有字體支持的 Features 都是一樣的,比如 iOS 上支持 sups 上標顯示和 subs 下標顯示,但是 Android 上的 Roboto 并不支持,甚至很多第三方字體其實并不支持 Features 。
有趣的是,在 Flutter Web 有一個渲染文本時會變模糊的問題 #58159 ,這個問題目前官方還沒有修復,但是你可以通過給 Text 設置任意 FontFeatures 來解決這個問題。
最后,如果對 FontFeature 還感興趣的朋友,可以通過一下資料深入了解,如果你還有什么關(guān)于字體上的問題,歡迎留言討論。
基于網(wǎng)友的問題再補充一下拓展知識,畢竟這方面內(nèi)容也不多 。
事實上在 dart 里就可以看到對應 FontWeight 約定俗稱用的是字體集里的什么字體:
所以如果對于默認字體有疑問,可以在你的手機字體找找是否有對應的字體, 比如雖然我們說 roboto 沒有 600 ,但是如果是 roboto mono 字體集是有 600 的 fontweight ,甚至還有 600 斜體: 。
另外注意這是 Flutter 而不是原生,具體實現(xiàn)調(diào)用是在 Engine 的 paragraph_skia.cc 和 paragraph_builder_skia.cc 下對應的 setFontFamilies 相關(guān)邏輯,當然默認字體庫指定在 typography.dart 下就看到,例如 'Roboto' 、 '.SF UI Display' 、 '.SF UI Text' 、 '.AppleSystemUIFont' 、 'Segoe UI' :
另外如果你在 Mac 的 Web 上使用 Flutter Web,可以看到指定的是 .AppleSystemUIFont ,而對于 .AppleSystemUIFont 它其實不算是一種字體,而是蘋果上字體的一種集合別稱:
[圖片上傳失敗...(image-40f5ce-1648368234737)]
還有,如果你去看 Flutter 默認自帶的 cupertino/context_menu_action.dart ,就可以看到一個有趣的情況:
當然,前面我們說了那么多,主要是針對英文的情況下,而在中文下還是有差異的 ,之前的文章也介紹過:
例如,在蘋果上的簡體中文其實會是 PingFang SC 字體,對應還有 PingFang TC 和 PingFang HK 的繁體集,而關(guān)于這個問題在 Flutter 上之前還出現(xiàn)過比較有意思的 bug :
當然后續(xù)的 #16709 修復了這個問題 ,而在以前的文章我也講過,當時我遇到了 “Flutter 在 iOS 系統(tǒng)上,系統(tǒng)語言是韓文時,在和中文一起出現(xiàn)會導致字體顯示異常" 的問題 :
解決方法也很簡單,就是給 fontFamilyFallback 配置上 ["PingFang SC" , "Heiti SC"] 就可以了,這是因為韓文在蘋果手機上使用的應該是 Apple SD Gothic Neo 這樣的超集字體庫,【廣】這個字符在這個字體集上是不存在的,所以就變成了中文的【廣】;
所以可以看到,字體相關(guān)是一個平時很少會深入接觸的東西,但是一旦涉及多語言和繪制,就很容易碰到問題的領(lǐng)域 。
(*注:以下僅個人配置過程參考,系統(tǒng)win7-64)
所需軟件
vsCode,Android Studio, MuMu模擬器 (直連手機調(diào)試的話就不需要了)
配置過程
1、Flutter安裝
安裝時忘記截圖,具體可參考鏈接 flutter中文網(wǎng) 相關(guān)教程+ 百度 ,現(xiàn)在網(wǎng)上教程很多,多踩點坑總會成功的。
2、MuMu模擬器調(diào)試時需進行相關(guān)配置
(*注:直連手機調(diào)試可忽略以下;執(zhí)行以下操作需要在執(zhí)行flutter doctor成功后,flutter run執(zhí)行前)
(1)mumu模擬器端口監(jiān)聽,需要執(zhí)行
(2)mumu模擬器調(diào)試flutter run可能會報錯,可以改成,具體原因可直接百度“--enable-software-rendering”
3、如需調(diào)試ios端可嘗試虛擬機+macOS+xCode
vmware+macOs可參考鏈接 VMware15安裝MacOS系統(tǒng) ,筆者按照該步驟已安裝成功
項目中存在一個輸入框,只能提交中文字符串,于是使用了如下的方法實現(xiàn)
但是上線運行之后,發(fā)現(xiàn)在iOS原生拼音輸入法中,只能一個字一個字輸入,每次輸入超過一個字就會直接變成拼音字母,并且長度限制在遇到中文拼音輸入法后也會失效
于是通過自定義過濾器的方法,解決了這個問題
關(guān)鍵方法在于判斷當前輸入框是否存在未完成的字符串,如果存在,則不做限制,否則根據(jù)參數(shù)進行限制
但是屬性 composing 聽說還存在bug,使用的時候要注意,很有可能還有坑等著????
參考:
解決方案:
頓悟:
感謝???? Alex 大神!!!
上一篇講到如果解決ios長按輸入框報錯的問題,但是最終沒有達到我們的要求,因為我們想實現(xiàn)中文的提示,那么本篇文章講講如何來實現(xiàn)多語言配置;
1.首先在pubspec.yaml的dependencies下加入這個
flutter_localizations:
sdk: flutter
如圖:
2.然后在MaterialApp設置一下localizationsDelegates如圖:
3.寫一個類繼承一下CupertinoLocalizations,在項目中 我這個類名叫ChineseCupertinoLocalizations(沒錯,就是localizationsDelegates中的第三個),如圖:
上次提到報錯的原因就是因為cutButtonLabel,copyButtonLabel,pasteButtonLabel,selectAllButtonLabel 這幾個按鈕沒有實現(xiàn),所以繼承CupertinoLocalizations一定要為這幾個按鈕賦值,這里是那種語言,那么,賦值就對應那種語言,同時要注意locale.languageCode也要填寫,如果你是中文,那么locale.languageCode =='zh';
4.在ios工程中,在項目的info設置語言環(huán)境
添加?Localization native development region---china
添加一個Localizations 為array類型的,并且設置值為?Chinese (simplified)
效果圖:( 注意:請把手機環(huán)境調(diào)試成中文的語言環(huán)境 )
Android?
ios 效果圖
我公司用flutter做了一個《柚品生活》的app,感興趣的朋友可以去看看,Android和ios都已經(jīng)上架了
最后附上GitHub項目地址 GitHub - hxxsocket/flutter_lg_demo: flutter多語言配置之中文
本文題目:flutter中文轉(zhuǎn)碼,flutter類型轉(zhuǎn)換
分享路徑:http://chinadenli.net/article41/dseeied.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供App開發(fā)、微信公眾號、自適應網(wǎng)站、建站公司、微信小程序、網(wǎng)站收錄
聲明:本網(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)