Flutter是一個(gè)移動(dòng)應(yīng)用程序的軟件開發(fā)工具包(SDK),具有以下特征:
創(chuàng)新互聯(lián)建站主要業(yè)務(wù)有網(wǎng)站營銷策劃、成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)站建設(shè)、微信公眾號(hào)開發(fā)、小程序設(shè)計(jì)、H5響應(yīng)式網(wǎng)站、程序開發(fā)等業(yè)務(wù)。一次合作終身朋友,是我們奉行的宗旨;我們不僅僅把客戶當(dāng)客戶,還把客戶視為我們的合作伙伴,在開展業(yè)務(wù)的過程中,公司還積累了豐富的行業(yè)經(jīng)驗(yàn)、營銷型網(wǎng)站資源和合作伙伴關(guān)系資源,并逐漸建立起規(guī)范的客戶服務(wù)和保障體系。
跨平臺(tái)應(yīng)用的框架,沒有使用WebView或者系統(tǒng)平臺(tái)自帶的控件,使用自身的高性能渲染引擎自繪
簡化版的瀏覽器,最大限度在android和ios上統(tǒng)一UI,包括業(yè)務(wù)邏輯和用戶體驗(yàn)
開發(fā)語言使用dart,結(jié)合C, C++, 和Skia(2D渲染引擎)構(gòu)建
支持hot reload,包含著完整的控件和工具鏈
一切皆控件,控件是每個(gè)Flutter應(yīng)用程序的基本構(gòu)建塊,與分離視圖、控制器、布局和其他屬性的框架不同,F(xiàn)lutter具有一致的統(tǒng)一對(duì)象模型:控件。一個(gè)控件可以定義:結(jié)構(gòu)元素(比如按鈕或菜單)、風(fēng)格元素(比如字體或顏色方案)、布局的方面(比如填充)、一些業(yè)務(wù)邏輯等
組合大于繼承,控件本身通常由許多小型、單用途的控件組成,結(jié)合起來產(chǎn)生強(qiáng)大的效果,類的層次結(jié)構(gòu)是扁平的,以最大化可能的組合數(shù)量
強(qiáng)化版的WebView,框架僅提供一個(gè)View層,大部分功能要依賴原生
目前只能夠運(yùn)行大部分Dart代碼(不能引入dart:mirrors或dart:html庫)
在以前的 《Flutter 上默認(rèn)的文本和字體知識(shí)點(diǎn)》 和 《帶你深入理解 Flutter 中的字體“冷”知識(shí)》 中,已經(jīng)介紹了很多 Flutter 上關(guān)于字體有趣的知識(shí)點(diǎn),而本篇講繼續(xù)介紹 Flutter 上關(guān)于 Text 的一個(gè)屬性: FontFeature , 事實(shí)上相較于 Flutter ,本篇內(nèi)容可能和前端或者設(shè)計(jì)關(guān)系更密切 。
什么是 FontFeature ? 簡單來說就是影響字體形狀的一個(gè)屬性 ,在前端的對(duì)應(yīng)領(lǐng)域里應(yīng)該是 font-feature-settings ,它有別于 FontFamily ,是用于指定字體內(nèi)字的形狀的一個(gè)參數(shù)。
我們知道 Flutter 默認(rèn)在 Android 上使用的是 Roboto 字體,而在 iOS 上使用的是 SF 字體,但是其實(shí) Roboto 字體也是分很多類型的,比如你去查閱手機(jī)的 system/fonts 目錄,就會(huì)發(fā)現(xiàn)很多帶有 Roboto 字樣的字體庫存在。
所以 Roboto 之類的字體庫是一個(gè)很大的字體集,不同的 font-weight 其實(shí)對(duì)應(yīng)著不同的 ttf ,例如默認(rèn)情況下的 Roboto 是不支持 font-weight 為 600 的配置 :
所以如下圖所示,如果我們?cè)O(shè)置了 w400 - w700 的 weight ,可以很明顯看到中間的 500 和 600 其實(shí)是一樣的粗細(xì),所以在 設(shè)置 weight 或者設(shè)計(jì) UI 時(shí),就需要考慮不同平臺(tái)上的 weight 是否支持想要的效果 。
回歸到 FontFeature 上,那 Roboto 自己默認(rèn)支持多少種 features 呢? 答案是 26 種,它們的編碼如下所示,運(yùn)行后效果也如下圖所示,從日常使用上看,這 26 種 Feature 基本滿足開發(fā)的大部分需求。
而 iOS 上的 SF pro 默認(rèn)支持 39 種 Features , 它們的編碼如下所示,運(yùn)行后效果也如下圖所示,可以看到 SF pro 支持的 Features 更多。
所以可以看到,并不是所有字體支持的 Features 都是一樣的,比如 iOS 上支持 sups 上標(biāo)顯示和 subs 下標(biāo)顯示,但是 Android 上的 Roboto 并不支持,甚至很多第三方字體其實(shí)并不支持 Features 。
有趣的是,在 Flutter Web 有一個(gè)渲染文本時(shí)會(huì)變模糊的問題 #58159 ,這個(gè)問題目前官方還沒有修復(fù),但是你可以通過給 Text 設(shè)置任意 FontFeatures 來解決這個(gè)問題。
最后,如果對(duì) FontFeature 還感興趣的朋友,可以通過一下資料深入了解,如果你還有什么關(guān)于字體上的問題,歡迎留言討論。
基于網(wǎng)友的問題再補(bǔ)充一下拓展知識(shí),畢竟這方面內(nèi)容也不多 。
事實(shí)上在 dart 里就可以看到對(duì)應(yīng) FontWeight 約定俗稱用的是字體集里的什么字體:
所以如果對(duì)于默認(rèn)字體有疑問,可以在你的手機(jī)字體找找是否有對(duì)應(yīng)的字體, 比如雖然我們說 roboto 沒有 600 ,但是如果是 roboto mono 字體集是有 600 的 fontweight ,甚至還有 600 斜體: 。
另外注意這是 Flutter 而不是原生,具體實(shí)現(xiàn)調(diào)用是在 Engine 的 paragraph_skia.cc 和 paragraph_builder_skia.cc 下對(duì)應(yīng)的 setFontFamilies 相關(guān)邏輯,當(dāng)然默認(rèn)字體庫指定在 typography.dart 下就看到,例如 'Roboto' 、 '.SF UI Display' 、 '.SF UI Text' 、 '.AppleSystemUIFont' 、 'Segoe UI' :
另外如果你在 Mac 的 Web 上使用 Flutter Web,可以看到指定的是 .AppleSystemUIFont ,而對(duì)于 .AppleSystemUIFont 它其實(shí)不算是一種字體,而是蘋果上字體的一種集合別稱:
[圖片上傳失敗...(image-40f5ce-1648368234737)]
還有,如果你去看 Flutter 默認(rèn)自帶的 cupertino/context_menu_action.dart ,就可以看到一個(gè)有趣的情況:
當(dāng)然,前面我們說了那么多,主要是針對(duì)英文的情況下,而在中文下還是有差異的 ,之前的文章也介紹過:
例如,在蘋果上的簡體中文其實(shí)會(huì)是 PingFang SC 字體,對(duì)應(yīng)還有 PingFang TC 和 PingFang HK 的繁體集,而關(guān)于這個(gè)問題在 Flutter 上之前還出現(xiàn)過比較有意思的 bug :
當(dāng)然后續(xù)的 #16709 修復(fù)了這個(gè)問題 ,而在以前的文章我也講過,當(dāng)時(shí)我遇到了 “Flutter 在 iOS 系統(tǒng)上,系統(tǒng)語言是韓文時(shí),在和中文一起出現(xiàn)會(huì)導(dǎo)致字體顯示異常" 的問題 :
解決方法也很簡單,就是給 fontFamilyFallback 配置上 ["PingFang SC" , "Heiti SC"] 就可以了,這是因?yàn)轫n文在蘋果手機(jī)上使用的應(yīng)該是 Apple SD Gothic Neo 這樣的超集字體庫,【廣】這個(gè)字符在這個(gè)字體集上是不存在的,所以就變成了中文的【廣】;
所以可以看到,字體相關(guān)是一個(gè)平時(shí)很少會(huì)深入接觸的東西,但是一旦涉及多語言和繪制,就很容易碰到問題的領(lǐng)域 。
Tip:顯示文本,有些樣式屬性和android的textView類似,例如對(duì)齊、大小、顏色等
Tip:Material庫提供了很多按鈕,例如ElevatedButton、TextButton、OutlinedButton等,這些都是直接或者間接對(duì)ButtonStyleButton
的包裝定制,所以大多數(shù)屬性和ButtonStyleButton一樣。另外所有的MaterialButton都有兩個(gè)共同特征:1、按下時(shí)會(huì)有水波動(dòng)畫 2、都有一個(gè)onPress回調(diào)方法,若不提供回調(diào)方法,則按鈕時(shí)禁止?fàn)顟B(tài),不響應(yīng)用戶點(diǎn)擊
Tip:使用Image來加載并顯示圖片,Image的數(shù)據(jù)源可以是asset、文件、內(nèi)存或者網(wǎng)絡(luò)。ImageProvider是一個(gè)抽象類,主要定義了圖片數(shù)據(jù)獲取的接口load( ),從不同的數(shù)據(jù)源中獲取數(shù)據(jù)。如AssetImage可以加載本地圖片資源,NetworkImage可以加載網(wǎng)絡(luò)圖片。
上一篇講到如果解決ios長按輸入框報(bào)錯(cuò)的問題,但是最終沒有達(dá)到我們的要求,因?yàn)槲覀兿雽?shí)現(xiàn)中文的提示,那么本篇文章講講如何來實(shí)現(xiàn)多語言配置;
1.首先在pubspec.yaml的dependencies下加入這個(gè)
flutter_localizations:
sdk: flutter
如圖:
2.然后在MaterialApp設(shè)置一下localizationsDelegates如圖:
3.寫一個(gè)類繼承一下CupertinoLocalizations,在項(xiàng)目中 我這個(gè)類名叫ChineseCupertinoLocalizations(沒錯(cuò),就是localizationsDelegates中的第三個(gè)),如圖:
上次提到報(bào)錯(cuò)的原因就是因?yàn)閏utButtonLabel,copyButtonLabel,pasteButtonLabel,selectAllButtonLabel 這幾個(gè)按鈕沒有實(shí)現(xiàn),所以繼承CupertinoLocalizations一定要為這幾個(gè)按鈕賦值,這里是那種語言,那么,賦值就對(duì)應(yīng)那種語言,同時(shí)要注意locale.languageCode也要填寫,如果你是中文,那么locale.languageCode =='zh';
4.在ios工程中,在項(xiàng)目的info設(shè)置語言環(huán)境
添加?Localization native development region---china
添加一個(gè)Localizations 為array類型的,并且設(shè)置值為?Chinese (simplified)
效果圖:( 注意:請(qǐng)把手機(jī)環(huán)境調(diào)試成中文的語言環(huán)境 )
Android?
ios 效果圖
我公司用flutter做了一個(gè)《柚品生活》的app,感興趣的朋友可以去看看,Android和ios都已經(jīng)上架了
最后附上GitHub項(xiàng)目地址 GitHub - hxxsocket/flutter_lg_demo: flutter多語言配置之中文
Flutter是谷歌的移動(dòng)UI框架,可以快速在iOS和Android上構(gòu)建高質(zhì)量的原生用戶界面。 Flutter可以與現(xiàn)有的代碼一起工作。在全世界,F(xiàn)lutter正在被越來越多的開發(fā)者和組織使用,并且Flutter是完全免費(fèi)、開源的。(-中文網(wǎng);-英文網(wǎng))
Flutter是一種趨勢,勢必會(huì)取代RN,成為最主流的跨平臺(tái)開發(fā)框架,基于Dart語言。ios開發(fā)必須Mac電腦。android開發(fā)window、linux、Mac均可。
文章標(biāo)題:flutter中文ui,Flutter中文文檔
鏈接分享:http://chinadenli.net/article12/dsdehdc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供手機(jī)網(wǎng)站建設(shè)、商城網(wǎng)站、靜態(tài)網(wǎng)站、移動(dòng)網(wǎng)站建設(shè)、App設(shè)計(jì)、品牌網(wǎng)站制作
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)