支持iOS 14和Android 11涂圆,新的i18n和l10n支持们镜,可用于生產(chǎn)的Google Maps和WebView插件,新的App Size工具等等润歉!
作者:Chris Sells
原文:https://medium.com/flutter/announcing-flutter-1-22-44f146009e5f
我們很高興推出最新版本的Flutter模狭,它廣泛支持iOS 14和Android11。Flutter 1.22在以前版本的基礎(chǔ)上構(gòu)建踩衩,使開發(fā)人員能夠從一個(gè)代碼庫為多個(gè)平臺(tái)構(gòu)建快速嚼鹉,美觀的用戶體驗(yàn)。我們的季度穩(wěn)定版本包含最新功能驱富,性能改進(jìn)和錯(cuò)誤修復(fù)锚赤,適合廣泛的生產(chǎn)使用。
由于這是新的移動(dòng)操作系統(tǒng)版本的發(fā)布季節(jié)褐鸥,因此此發(fā)行版?zhèn)戎赜诖_保Android 11和iOS 14與Flutter兼容线脚。這兩個(gè)操作系統(tǒng)的更新都包括大量的幕后工作,以符合最新的SDK并確保所有內(nèi)容都通過我們廣泛的測(cè)試套件叫榕。對(duì)于iOS 14浑侥,此版本包括對(duì)新Xcode 12,新圖標(biāo)的支持以及對(duì)新iOS 14 App Clips功能的預(yù)覽支持晰绎。對(duì)于Android 11寓落,此更新支持新類型的顯示切口以及在調(diào)出軟鍵盤時(shí)更流暢的動(dòng)畫。
該版本發(fā)布于我們的1.20發(fā)布兩個(gè)月之后荞下,因此比大多數(shù)版本都短伶选。即使在這么短的時(shí)間內(nèi)史飞,我們也關(guān)閉了3,024期,合并了197個(gè)貢獻(xiàn)者的1,944個(gè)PR考蕾。在這些貢獻(xiàn)者中祸憋,有114位(58%)來自整個(gè)社區(qū),他們貢獻(xiàn)了271個(gè)PR肖卧。最大的單一貢獻(xiàn)者是 a14n蚯窥,他再次以20個(gè)PR成為我們的杰出貢獻(xiàn)者名單,其中大多數(shù)是作為支持Flutter中的零安全性工作的一部分而完成的(更多內(nèi)容即將推出)塞帐。
除了對(duì)新的移動(dòng)操作系統(tǒng)版本的支持外拦赠,還有很多其他要分享的新聞,包括預(yù)覽Android最重要的功能之一:狀態(tài)恢復(fù)葵姥,新的“Material 風(fēng)格按鈕“荷鼠,新的國際化和本地化支持(與熱重載一起使用),一個(gè)新的Navigator榔幸,一個(gè)穩(wěn)定的Platform Views版本(Google Maps和WebView插件的基礎(chǔ))以及一個(gè)開關(guān)允乐,您可以在其中添加代碼以改善在具有高頻率顯示的設(shè)備上的滾動(dòng)。我們還提供了一個(gè)用于剖析應(yīng)用程序大小并確保您要構(gòu)建的插件僅支持您要支持的平臺(tái)的新工具削咆。
iOS 14
每當(dāng)發(fā)布新版本的移動(dòng)操作系統(tǒng)時(shí)牍疏,我們都會(huì)對(duì)其進(jìn)行徹底測(cè)試,以查找影響Flutter及其工具的不兼容性或更改拨齐。
對(duì)于iOS 14鳞陨,我們對(duì)Flutter進(jìn)行了很多更改,以確保它可以按照開發(fā)人員的方式工作:
- Xcode 12需要iOS 9.0或更高版本瞻惋,因此我們的默認(rèn)模板將其默認(rèn)值從8.0增加到9.0
- iOS 14特定崩潰和字體渲染問題已在Flutter 1.22中修復(fù)
- Flutter 1.20.4厦滤,修復(fù)了部署到真機(jī)設(shè)備的問題
- 當(dāng)應(yīng)用程序訪問其剪貼板時(shí)顯示使用通知,導(dǎo)致在Flutter應(yīng)用程序中出現(xiàn)虛假通知歼狼,該問題已在Flutter 1.20.4中修復(fù)
- iOS 14設(shè)備上會(huì)禁止運(yùn)行debug應(yīng)用程序掏导,但實(shí)際開發(fā)debug除外
- 針對(duì)本地調(diào)試的Flutter應(yīng)用程序的有關(guān)網(wǎng)絡(luò)安全的新策略使iOS 14顯示一次性確認(rèn)對(duì)話框(僅在開發(fā)過程中,不適用于已發(fā)布的Flutter應(yīng)用程序)
如果您要通過Flutter應(yīng)用定位iOS 14羽峰,我們強(qiáng)烈建議您使用Flutter 1.22對(duì)其進(jìn)行重建趟咆,然后立即將其部署到App Store中,以確保您的iOS 14用戶獲得最佳體驗(yàn)限寞。
有關(guān)使用Flutter適配iOS 14的更多詳細(xì)信息忍啸,包括添加Flutter應(yīng)用到原生應(yīng)用,deep linking和通知注意事項(xiàng)履植,請(qǐng)參閱 flutter.dev上的iOS 14文檔计雌。
希望所有有關(guān)工具和SDK支持的工作都可以讓您專注于自己關(guān)心的編碼-利用iOS 14的新功能关贵。
其中一項(xiàng)功能是對(duì)iOS的新SF Symbols字體的更新支持森瘪,我們花一些時(shí)間更新了cupertino_icon程序包。將cupertino_icons依賴關(guān)系更新為新的1.0主要版本后,CupertinoIcons的現(xiàn)有用法將自動(dòng)映射到新樣式絮重。如果您將cupertino_icons 1.0與Flutter 1.22結(jié)合使用鼻吮,那么您還可以通過CupertinoIcons API訪問約900個(gè)新圖標(biāo)剩燥。
您可以在cupertino_icons預(yù)覽頁面上看到圖標(biāo)的完整列表澳骤,在 flutter.dev上可以看到遷移詳細(xì)信息頁面。
您可以在iOS 14上嘗試使用Flutter的另一個(gè)功能是App Clips反番,它是iOS 14的一項(xiàng)新功能沙热,它支持10MB以下輕量級(jí)應(yīng)用程序的快速,無安裝應(yīng)用程序執(zhí)行罢缸。在Flutter 1.22版中篙贸,我們預(yù)覽了使用Flutter構(gòu)建的App Clip目標(biāo)。
有關(guān)如何使用Flutter構(gòu)建Clip的更多詳細(xì)信息枫疆,請(qǐng)查看flutter.dev上的文檔爵川。您也可以參考這個(gè)簡單的示例項(xiàng)目。
Android 11
Flutter的這個(gè)版本也與本月Android 11的發(fā)布相吻合息楔。 Flutter框架和引擎已更新寝贡,以支持最新版本的Android中引入的兩個(gè)新功能。
首先值依,F(xiàn)lutter現(xiàn)在支持多種屏幕適配(比如瀑布屏)圃泡。
通過使用MediaQuery和SafeArea API,您可以確保將活動(dòng)的UI和交互式元素放置在設(shè)備顯示屏的無障礙區(qū)域中鳞滨。另外洞焙,您將要避免在瀑布邊緣區(qū)域使用手勢(shì)檢測(cè)器蟆淀,因?yàn)檫@可能會(huì)導(dǎo)致意外觸摸拯啦。
其次,動(dòng)畫在顯示軟件鍵盤時(shí)與Android 11同步熔任。
問題 #19279是一個(gè)長期存在的問題褒链,其中系統(tǒng)鍵盤的顯示/隱藏動(dòng)畫與Flutter的插圖不同步。這在Android 11中已修復(fù)疑苔。
關(guān)于Android嵌入API的一項(xiàng)說明甫匹。去年,隨著Flutter 1.12版的推出惦费,我們推出了一套適用于Android的新Flutter引擎和Flutter插件API兵迅。我們創(chuàng)建了這些v2 API,以更好地支持Android上的應(yīng)用程序添加用戶薪贫。一年后恍箭,超過80%的Android插件使用了新的Android API。從1.22開始瞧省,我們不再使用較舊的v1 API扯夭。
如果您仍在使用Android v1 API鳍贾,那么這對(duì)您意味著:
- 新創(chuàng)建的插件將不再針對(duì)v1 API
- Flutter工具的
-no-enable-android-embedding-v2
配置標(biāo)記已刪除,現(xiàn)在是默認(rèn)行為 - 仍在使用v1 API的舊版應(yīng)用程序在構(gòu)建過程中將顯示棄用警告交洗,該警告指向支持新的Android插件API文檔
同時(shí)骑科,如果您仍然有基于v1 Android API的Flutter應(yīng)用程序,它將繼續(xù)運(yùn)行构拳。但是咆爽,您可能會(huì)開始遇到僅針對(duì)v2 API且v1 Android API無法使用的新插件。有關(guān)更多詳細(xì)信息置森,請(qǐng)參見重大更改文檔伍掀。
擴(kuò)展的 Button 組件
現(xiàn)有的Flutter按鈕看上去不錯(cuò),但很難使用暇藏,尤其是在需要自定義主題時(shí)蜜笤。此外,“Material”規(guī)范已擴(kuò)展為包括具有新樣式的新按鈕盐碱。
為使Flutter保持與Material指南的最新水平把兔,我們很高興地宣布Flutter 1.22中的引入全新的按鈕。
該P(yáng)R并沒有嘗試就地開發(fā)現(xiàn)有的按鈕類及其主題瓮顽,而是引入了新的替換按鈕小部件和主題县好。除了使我們擺脫現(xiàn)有類的向后兼容性迷宮之外,新名稱還使Flutter與Material Design規(guī)范同步暖混,后者使用按鈕組件的新名稱缕贡。
新主題遵循Flutter最近在新Material窗口小部件中采用的“規(guī)范化”模式。如果您想玩演示拣播,DartPad上有一個(gè)很棒的演示晾咪。這并不是一個(gè)重大變化,因?yàn)镕latButton贮配,OutlineButton谍倦,RaisedButton,ButtonBar泪勒,ButtonBarTheme和ButtonTheme的語義不會(huì)改變昼蛀。您可以將舊按鈕與新按鈕混合使用。
新的國際化和本地化支持
自Flutter創(chuàng)立以來圆存,F(xiàn)lutter已提供您的應(yīng)用程序國際化(i18n)和本地化(l10n)所需的核心功能叼旋。但是,在此版本中沦辙,我們將最佳做法的意見納入了我們的工具中夫植,甚至在添加新的l10n信息時(shí)啟用了熱重裝支持來更新您的應(yīng)用。
如果您想了解有關(guān)Flutter對(duì)l10n的支持的更多詳細(xì)信息怕轿,包括本地化消息偷崩,帶有參數(shù)的消息辟拷,日期,數(shù)字和貨幣阐斜,請(qǐng)閱讀Flutter Internationalization用戶指南衫冻。
此外,如果您對(duì)i18n和l10n感興趣谒出,那么您可能還對(duì)那些字符串不適合普通ASCII字符的字符串感興趣隅俘,例如Unicode和emoji。最近笤喳,Dart團(tuán)隊(duì)發(fā)布了character軟件包为居,該軟件包可幫助開發(fā)人員處理Unicode(擴(kuò)展)字形簇。該軟件包有助于解決諸如如何正確地將字符串(如“ A in text in English”)縮寫為前15個(gè)字符的問題杀狡。使用String類蒙畴,該縮寫為“ A????text in”,它僅是12個(gè)用戶可感知的字符呜象。另一方面膳凝,使用字符包會(huì)產(chǎn)生“ A????text in Eng”的正確縮寫。
通過此PR恭陡,F(xiàn)lutter使用字符包來正確處理這些復(fù)雜字符蹬音。例如,當(dāng)使用具有maxLength限制的TextField時(shí)休玩,像????????這樣的字符現(xiàn)在可以正確地計(jì)為單個(gè)字符著淆。同樣,有了此PR拴疤,在Flutter所在的項(xiàng)目中永部,字符包均可自動(dòng)在項(xiàng)目中使用,而無需手動(dòng)添加遥赚。希望這使得處理來自所有語言環(huán)境的各種字符串變得更加容易扬舒。有關(guān)character包的更多詳細(xì)信息阐肤,請(qǐng)查看出色的文章凫佛,正確完成Dart字符串操作。
Google Maps和WebView插件準(zhǔn)備投入生產(chǎn)
在Flutter小組的這里孕惜,我們通常會(huì)謹(jǐn)慎地將某些標(biāo)簽標(biāo)記為“生產(chǎn)就緒”愧薛,直到我們對(duì)自己進(jìn)行徹底測(cè)試為止。對(duì)于google_maps_flutter和webview_flutter插件衫画,選通因素一直是底層的Platform Views實(shí)現(xiàn)毫炉,該實(shí)現(xiàn)允許將Android和iOS的本機(jī)UI組件托管在Flutter應(yīng)用程序中。在此版本的Flutter中削罩,我們很高興地宣布瞄勾,我們對(duì)框架進(jìn)行了強(qiáng)化费奸,足以將這兩個(gè)插件聲明為可以投入生產(chǎn)。
在Flutter 1.22中进陡,我們添加了替代的Platform Views實(shí)現(xiàn)愿阐,該實(shí)現(xiàn)修復(fù)了所有已知的鍵盤以及Android視圖的可訪問性問題。此外趾疚,它還適用于19級(jí)及以上的Android API(以前要求20級(jí))缨历。我們還在iOS上進(jìn)行了線程改進(jìn),使平臺(tái)視圖更高效糙麦,更可靠(并且不再需要您將io.flutter.embedded_views_preview標(biāo)志添加到iOS Info.plist)辛孵。
webview_flutter插件支持新的Android平臺(tái)視圖模式,但當(dāng)前需要手動(dòng)啟用赡磅。一旦在更廣泛的社區(qū)中得到更多使用魄缚,我們將默認(rèn)在將來的版本中啟用它。
Google Maps和WebView插件已經(jīng)從Platform Views的改進(jìn)中受益焚廊。如果您想使用平臺(tái)視圖在iOS或Android上托管自己的本機(jī)UI組件鲜滩,則可以了解如何在使用平臺(tái)視圖在Flutter應(yīng)用中托管本機(jī)Android和iOS視圖上。
Navigator 2.0
如果您以前在Flutter應(yīng)用程序中使用過導(dǎo)航功能节值,則可能已經(jīng)注意到核心數(shù)據(jù)結(jié)構(gòu)(用戶正在瀏覽的頁面堆棧)對(duì)您而言是隱藏的徙硅。而是要對(duì)其進(jìn)行管理,請(qǐng)調(diào)用Navigator.pop()或Navigator.push()搞疗。舉例來說嗓蘑,假設(shè)您想在首頁上顯示一系列小部件,并允許用戶點(diǎn)擊一個(gè)小部件以轉(zhuǎn)到專門針對(duì)該顏色的詳細(xì)信息頁面匿乃。
實(shí)現(xiàn)如下:
class ColorListScreen extends StatelessWidget {
final List<Color> colors;
final void Function(Color color) onTapped;
ColorListScreen({this.colors, this.onTapped});
@override
Widget build(BuildContext context) => Scaffold(
appBar: AppBar(title: Text('Colors')),
body: Column(
children: [
// you can see and decide on every color in this list
for (final color in colors)
Expanded(
child: GestureDetector(
child: Container(color: color),
onTap: () => onTapped(color),
),
)
],
),
);
}
class ColorScreen extends StatelessWidget {
final Color color;
const ColorScreen({this.color});
@override
Widget build(BuildContext context) => Scaffold(
appBar: AppBar(title: Text('Color')),
body: Container(color: color),
);
}
使用最簡單的Navigator 1.0樣式桩皿,您可以以看起來非常簡單的方式在這兩個(gè)屏幕之間導(dǎo)航:
class _ColorAppState extends State<ColorApp> {
List<Color> _colors = [Colors.red, Colors.green, Colors.blue];
@override
Widget build(BuildContext context) => MaterialApp(
title: 'Color App',
home: Builder(
builder: (context) => ColorListScreen(
colors: _colors,
// the Navigator manages the list of pages itself; you can only push and pop
onTapped: (color) => Navigator.push(
context,
MaterialPageRoute(builder: (context) => ColorScreen(color: color)),
),
),
),
);
}
只需對(duì)Navigator.push()進(jìn)行調(diào)用,即可將第一個(gè)頁面推到第一個(gè)頁面的頂部幢炸,從而創(chuàng)建兩頁的堆棧泄隔。但是,與在ColorListScreen的build方法中創(chuàng)建的Container列表不同宛徊,該堆棧對(duì)您隱藏佛嬉。而且,由于它是隱藏的闸天,因此很難針對(duì)其他情況進(jìn)行管理暖呕,例如處理由本機(jī)嵌入提供的初始路由的深層鏈接,或者來自Web的URL或來自Android的意圖苞氮。管理同一頁面的不同排列之間的嵌套路由也極其困難湾揽。
Navigator 2.0通過使頁面堆棧可見而解決了這些問題,甚至更多库物。這是在相同的ColorListScreen和ColorScreen之間導(dǎo)航的更新示例:
class _ColorAppState extends State<ColorApp> {
Color _selectedColor;
List<Color> _colors = [Colors.red, Colors.green, Colors.blue];
@override
Widget build(BuildContext context) => MaterialApp(
title: 'Color App',
home: Navigator(
// you can see and decide on every page in this list
pages: [
MaterialPage(
child: ColorListScreen(
colors: _colors,
onTapped: (color) => setState(() => _selectedColor = color),
),
),
if (_selectedColor != null) MaterialPage(child: ColorScreen(color: _selectedColor)),
],
onPopPage: (route, result) {
if (!route.didPop(result)) return false;
setState(() => _selectedColor = null);
return true;
},
),
);
}
該應(yīng)用程序顯式創(chuàng)建一個(gè)導(dǎo)航器霸旗,并為其提供代表完整堆棧的頁面列表。我們創(chuàng)建一個(gè)空的_selectedColor戚揭,以指示尚未選擇任何顏色定硝,因此我們最初不顯示ColorScreen。當(dāng)用戶選擇一種顏色時(shí)毫目,我們通常會(huì)調(diào)用setState()來向Flutter表示您希望再次調(diào)用build()方法蔬啡,該方法現(xiàn)在會(huì)創(chuàng)建一個(gè)堆棧,其頂部是ColorScreen镀虐。
您可以在OnPopPage回調(diào)中更新狀態(tài)箱蟆,例如,如果用戶彈出刮便,則表示他們已“取消選擇”當(dāng)前顏色空猜,因此我們不再希望顯示該頁面。
如果Navigator 2.0看起來像Flutter的其余部分恨旱,那就是意圖-它是聲明性的辈毯,而Navigator 1.0則是必須的。這個(gè)想法是要在導(dǎo)航和Flutter的其余部分之間統(tǒng)一模型搜贤,同時(shí)解決許多問題并添加功能谆沃。實(shí)際上,這個(gè)小例子幾乎不涉及Navigator 2.0的內(nèi)容仪芒。有關(guān)詳細(xì)信息唁影,我強(qiáng)烈推薦有關(guān)Flutter中的聲明式導(dǎo)航和路由的文章。
另外掂名,您對(duì)Navigator 1.0的現(xiàn)有使用將像今天一樣繼續(xù)使用据沈,并且不會(huì)在短期內(nèi)被刪除。如果您喜歡該模型饺蔑,則可以繼續(xù)使用它锌介。但是,如果您嘗試使用Navigator 2.0猾警,我們認(rèn)為您會(huì)喜歡的孔祸。
預(yù)覽:Android的狀態(tài)還原
在此版本中可供您試用的新功能是對(duì)Android狀態(tài)恢復(fù)的支持。這是我們最受歡迎的功能之一肿嘲,擁有217個(gè)大拇指融击!
對(duì)于不熟悉狀態(tài)還原需求的用戶,移動(dòng)操作系統(tǒng)可能會(huì)殺死后臺(tái)的應(yīng)用程序雳窟,以回收前臺(tái)應(yīng)用程序的資源。發(fā)生這種情況時(shí),操作系統(tǒng)會(huì)通知該應(yīng)用被終止以快速保存任何UI狀態(tài)封救,以便在用戶循環(huán)回到該應(yīng)用時(shí)可以將其恢復(fù)拇涤。正確實(shí)施后,可以為用戶提供無縫的體驗(yàn)誉结,同時(shí)可以更好地利用設(shè)備的資源鹅士。到目前為止,F(xiàn)lutter不支持狀態(tài)還原惩坑,沒有框架的支持掉盅,很難正確地進(jìn)行狀態(tài)還原。因此以舒,我們很高興能夠?yàn)锳ndroid提供此功能的基本實(shí)現(xiàn)趾痘。
這是一個(gè)用于恢復(fù)默認(rèn)Flutter Counter應(yīng)用狀態(tài)的非常簡單的示例:
class CounterState extends State<RestorableCounter> with RestorationMixin {
@override
String get restorationId => widget.restorationId;
RestorableInt _counter = RestorableInt(0);
@override
void restoreState(RestorationBucket oldBucket) => registerForRestoration(_counter, 'count');
void _incrementCounter() => setState(() => _counter.value++);
@override
Widget build(BuildContext context) => Scaffold(
body: Center(child: Text('${_counter.value}')),
floatingActionButton: FloatingActionButton(onPressed: _incrementCounter),
);
}
簡要地說,每個(gè)小部件都有一個(gè) storage bucket蔓钟,該storage bucket使用唯一的ID向RestorationMixin注冊(cè)永票。通過使用RestorableProperty類型(如此處使用的RestorableInt)來存儲(chǔ)特定于UI的數(shù)據(jù),并通過State Restoration功能注冊(cè)該數(shù)據(jù)滥沫,該數(shù)據(jù)將在Android殺死該應(yīng)用之前自動(dòng)存儲(chǔ)侣集,并在其恢復(fù)正常運(yùn)行時(shí)恢復(fù)。就是這樣兰绣。所有以Restoration *類型存儲(chǔ)的數(shù)據(jù)世分,例如RestorableInt,RestoableString和RestorableTextEditingController(我們都有很多)都將被還原缀辩。而且罚攀,如果我們沒有涵蓋您要還原的所有類型,則可以通過擴(kuò)展RestorableProperty創(chuàng)建自己的類型雌澄。
為了自動(dòng)測(cè)試狀態(tài)恢復(fù)斋泄,我們向WidgetTester添加了新的restartAndRestore API。要進(jìn)行手動(dòng)測(cè)試镐牺,最簡單的方法是在Android設(shè)備上啟動(dòng)啟用了狀態(tài)恢復(fù)功能的Flutter應(yīng)用炫掐,在Android開發(fā)人員設(shè)置中啟用“不要保留活動(dòng)”,運(yùn)行Flutter應(yīng)用睬涧,將其置于后臺(tái)募胃,然后然后回到它。此時(shí)畦浓,Android將終止并恢復(fù)您的應(yīng)用程序痹束,因此您可以查看一切是否按預(yù)期工作。
盡管我們很高興將狀態(tài)恢復(fù)的預(yù)覽版放在您的手中讶请,但還有更多工作要做祷嘶。例如,狀態(tài)恢復(fù)不僅適用于Android,iOS應(yīng)用程序也可以受益论巍。此外烛谊,我們正在忙于更新自己的窗口小部件,以在恢復(fù)過程中保持其狀態(tài)嘉汰。我們已經(jīng)在Scrollable類中提供了支持丹禀,例如ListView和SingleChildScrollView(記住用戶的滾動(dòng)位置)和TextField(恢復(fù)他們輸入的文本),并且我們計(jì)劃將其擴(kuò)展到其他小部件鞋怀。
預(yù)覽:平滑滾動(dòng)以提供不匹配的輸入和顯示頻率
當(dāng)輸入和顯示頻率不同時(shí)双泪,F(xiàn)lutter團(tuán)隊(duì)與Google內(nèi)部合作伙伴合作,極大地提高了滾動(dòng)性能密似。例如焙矛,Pixel 4輸入的運(yùn)行頻率為120hz,而顯示屏的運(yùn)行頻率為90hz辛友。滾動(dòng)時(shí)薄扁,這種不匹配會(huì)導(dǎo)致性能下降。使用新的resamplingEnabled標(biāo)志废累,您可以利用我們?cè)贔lutter中完成的性能工作來解決此問題:
void main() {
GestureBinding.instance.resamplingEnabled = true;
run(MyApp());
}
根據(jù)所涉及的頻率差異邓梅,啟用此標(biāo)志可以使?jié)L動(dòng)時(shí)的顫動(dòng)減少多達(dá)97%。當(dāng)我們確定這是最好的體驗(yàn)時(shí)邑滨,我們計(jì)劃在以后的版本中默認(rèn)啟用此標(biāo)志日缨。
新的統(tǒng)一的Dart開發(fā)人員工具
與往常一樣,對(duì)Flutter的更新不僅意味著引擎和框架掖看,還包括工具匣距。 Flutter 1.22包括Dart(2.10)的新版本,還有一個(gè)新的dart CLI工具哎壳,您可能也會(huì)發(fā)現(xiàn)它有用毅待。
Dart歷史上有許多較小的開發(fā)人員工具(例如,用于格式化的dartfmt和用于代碼分析的dartanalyzer)归榕。 Dart 2.10中的新增功能是一個(gè)與Flutter工具非常相似的統(tǒng)一的Dart開發(fā)人員工具尸红。
從今天的Flutter 1.22 SDK開始,您會(huì)發(fā)現(xiàn)/ bin文件夾(您可能在PATH中包含該文件夾)同時(shí)包含flutter和dart命令刹泄。有關(guān)更多詳細(xì)信息外里,請(qǐng)參見Dart 2.10博客文章。
應(yīng)用程式大小分析工具
作為Flutter 1.22的一部分發(fā)布的工具包括一個(gè)新的輸出大小分析實(shí)用程序特石。此工具可幫助診斷Flutter盅蝗,您的應(yīng)用大小細(xì)分是否會(huì)隨著時(shí)間變化。
您可以通過將--analyze-size標(biāo)志傳遞給以下任何命令來使用該工具收集分析所需的數(shù)據(jù):
flutter build apk
flutter build appbundle
flutter build ios
flutter build linux
flutter build macos
flutter build windows
在構(gòu)建Flutter輸出工件時(shí)使用此標(biāo)志將打印工件尺寸和組成的摘要姆蘸。這包括本機(jī)代碼墩莫,資產(chǎn)芙委,甚至是已編譯Dart代碼的程序包級(jí)細(xì)分。
此摘要有助于快速識(shí)別應(yīng)用程序的程序包大小用法中的熱點(diǎn)贼穆。此外题山,收集到的數(shù)據(jù)還可以作為JSON文件使用兰粉,供Dart DevTools使用故痊,它使您可以按照flutter.dev上的說明進(jìn)一步瀏覽應(yīng)用程序的內(nèi)容,查明大小問題并查看兩個(gè)不同JSON文件之間的更改玖姑。加載JSON文件后愕秫,您將擁有一個(gè)界面,該界面為您提供應(yīng)用大小的樹狀圖焰络。
有關(guān)您可以使用“應(yīng)用大小”工具執(zhí)行的操作的更多詳細(xì)信息戴甩,請(qǐng)閱讀flutter.dev上的“使用應(yīng)用大小工具”文檔。
預(yù)覽:DevTools中更新的網(wǎng)絡(luò)頁面
此版本中的另一個(gè)DevTools預(yù)覽功能是能夠在“網(wǎng)絡(luò)”選項(xiàng)卡中查看HTTP和HTTPs響應(yīng)主體闪彼。
要啟用此功能甜孤,請(qǐng)通過flutter通道dev和flutter通道升級(jí)確保您位于Flutter dev通道上。
此外畏腕,對(duì)于具有大量網(wǎng)絡(luò)流量的應(yīng)用缴川,我們提供了搜索和過濾功能。
有關(guān)“網(wǎng)絡(luò)”選項(xiàng)卡的文檔描馅,請(qǐng)參閱在flutter.dev上使用網(wǎng)絡(luò)視圖把夸。
IntelliJ中的托管DevTools檢查器選項(xiàng)卡
一段時(shí)間以來,我們一直在維護(hù)某些Flutter工具的兩個(gè)副本铭污,例如IntelliJ中的Inspector窗格和Dart DevTools中的Inspector選項(xiàng)卡恋日。這不僅會(huì)減慢我們的速度,因?yàn)槲覀儽仨毦S護(hù)兩個(gè)代碼庫嘹狞,而且某些功能尚未納入IntelliJ插件中岂膳,例如布局資源管理器。因此磅网,為了解決這兩個(gè)問題谈截,我們啟用了直接從IntelliJ內(nèi)部的Dart DevTools托管“檢查器”選項(xiàng)卡的功能。
注意添加了Layout Explorer知市,您可以在代碼旁邊使用它傻盟。要啟用此選項(xiàng),請(qǐng)轉(zhuǎn)至 Preferences > Languages & Frameworks > Flutter > Enable embedded DevTools inspector
改進(jìn)了Visual Studio Code中的輸出鏈接
Flutter開發(fā)人員所面臨的常規(guī)活動(dòng)是從終端或堆棧跟蹤中的錯(cuò)誤輸出中進(jìn)行嫂丙。在適用于Visual Studio Code的Flutter擴(kuò)展的最新版本中娘赴,現(xiàn)在可以正確解析這些鏈接,以使您可以直接從輸出中啟用鏈接跟啤。
看來這是一件小事诽表,但是對(duì)于此功能的初步反饋已經(jīng)非常積極唉锌。
與往常一樣,此處的工具更改列表太多竿奏,但是我建議以下公告以了解詳細(xì)信息:
- Dart DevTools — 0.9.0
- Dart DevTools — 0.9.1
- Dart DevTools — 0.9.3
- Flutter IntelliJ Plugin M48.1 Release
- Flutter IntelliJ Plugin M49 Release
- Flutter IntelliJ Plugin M50 Release
- VS Code extensions v3.14.0
- VS Code extensions v3.15.0
客戶關(guān)注點(diǎn):EasyA
EasyA是一款訂閱應(yīng)用程序袄简,旨在使適齡學(xué)生通過即時(shí)消息與出色的導(dǎo)師聯(lián)系,并使用Flutter編寫泛啸。最近绿语,它被Apple推薦為“每日應(yīng)用程序”。
“當(dāng)學(xué)校在今年初開始上網(wǎng)時(shí)候址,我們知道我們需要快速啟動(dòng)輔導(dǎo)應(yīng)用程序來幫助學(xué)生吕粹。 Flutter的驚人發(fā)展速度意味著我們能夠?yàn)閕OS和Android實(shí)施屢獲殊榮的設(shè)計(jì),并且還可以發(fā)布到Web上—及時(shí)鎖定岗仑!通常匹耕,這實(shí)際上是不可能的。但是荠雕,由于Flutter允許我們同時(shí)針對(duì)所有三個(gè)平臺(tái)稳其,因此我們能夠高效地共享代碼,并充分利用我們的小型開發(fā)人員團(tuán)隊(duì)炸卑〖染希”
EasyA聯(lián)合創(chuàng)始人Phil Kwok
重大變化
與往常一樣,我們?cè)噲D將重大更改的數(shù)量保持在最少矾兜。以下是Flutter 1.22版本中的列表损趋。
- 56413 Prevent viewport.showOnScreen from scrolling the viewport if the specified Rect is already visible.
- 62395 [gen_l10n] Synthetic package generation by default
- 62588 Build routes even less.
概要
Flutter 1.22穩(wěn)定版可能在上一版本之后很快問世,但是其中包含很多好東西椅寺,因此本篇文章無法一一列舉浑槽。我們希望此版本可以幫助您為iOS和Android開發(fā)出色的應(yīng)用程序,我們迫不及待想看到您的商店中有什么返帕!感謝您的支持-我們?yōu)槟蛟霧lutter桐玻。
交流
老孟Flutter博客(330個(gè)控件用法+實(shí)戰(zhàn)入門系列文章):http://laomengit.com