Dart 2.17發(fā)布,新特性速遞

Flutter 3.0已經(jīng)與2022年5月12日發(fā)布,隨之發(fā)布的還有 Dart 2.17版本便锨,在感嘆谷歌的版本升級(jí)快節(jié)奏之余围辙,也來(lái)看看 Dart 2.17版本有哪些新特性吧。

概述

本次發(fā)布的版本主要是為了提高生產(chǎn)力和提高跨平臺(tái)兼容性放案。同時(shí)提供了新的語(yǔ)言特性,具體如下:

  • 支撐成員枚舉
  • 改善了父類參數(shù)轉(zhuǎn)發(fā)的方式
  • 命名參數(shù)更加靈活

同時(shí)更新了 Dart 語(yǔ)言編碼規(guī)范檢查工具(package:lints)矫俺,以遵循最佳的 Dart 編程實(shí)踐吱殉。 此外,還更新了核心庫(kù)的 API 文檔厘托,提供了更豐富的示例代碼友雳。為了提高跨平臺(tái)的可移植性,在 Flutter 插件中提供了使用 dart:ffi(用于與原生 C 語(yǔ)言代碼交互)新的模板代碼铅匹,以便支持 RISC-V 指令集處理器押赊,以及支持對(duì) macOS和 Windows 應(yīng)用程序進(jìn)行簽名。

枚舉特性增強(qiáng)包斑,支持成員屬性

這個(gè)特性其實(shí)在 Java 語(yǔ)言中已經(jīng)支持流礁,其實(shí)就是支持在枚舉中支持定義成員,包括變量和方法罗丰。這樣的好處是可以在構(gòu)建枚舉的時(shí)候指定對(duì)應(yīng)的值和支持調(diào)用枚舉的方法神帅。這樣的枚舉更像是一個(gè)類了。舉個(gè)例子萌抵,我們會(huì)對(duì)水會(huì)定義冰水(frozen找御,0攝氏度)、溫水(40攝氏度)和開水(100攝氏度)绍填,以前要獲取一個(gè)枚舉對(duì)應(yīng)的值霎桅,需要使用 extension進(jìn)行擴(kuò)展,示例代碼如下:

enum Water {
  frozen,
  lukewarm,
  boiling;
}

extension Members on Water {
  int waterToTemp(Water water) {
    switch (water) {
      case Water.frozen:
        return 0;
      case Water.lukewarm:
        return 40;
      case Water.boiling:
        return 100;
    }
  }
  
  String convertToString() => 'The $name water is ${waterToTemp(this)} ℃.';
}

void main() {
  print(Water.frozen.convertToString());
}

當(dāng)枚舉對(duì)應(yīng)特定值的時(shí)候讨永,這樣就太麻煩了滔驶!Dart 2.17版本后就簡(jiǎn)單多了。

enum Water {
  frozen(0),
  lukewarm(40),
  boiling(100);
  
  final int temperature;
  const Water(this.temperature);
  
  @override
  String toString() => 'The $name water is $temperature ℃.'
}

void main() {
  print(Water.frozen);
}

簡(jiǎn)化父類構(gòu)造器

當(dāng)我們?cè)?Dart 中使用繼承的時(shí)候住闯,通常會(huì)需要調(diào)用父類的構(gòu)造器進(jìn)行初始化瓜浸。之前我們通常需要先列出類自身的構(gòu)造方法的參數(shù),然后再把這些參數(shù)傳給父類比原,就系那個(gè)下面這樣:

class OutlineButton extends ButtonStyleButton {
  const OutlineButton({
    Key? key,
    required VoidCallback? onPressed,
    VoidCallback? onLongPress,
    ValueChanged<bool>? onHover,
    ValueChanged<bool>? onFocusChange,
    ButtonStyle? style,
    FocusNode? focusNode,
    bool autofocus = false,
    Clip clipBehavior = Clip.none,
    required Widget child,
  }) : super(
    key: key
    onPressed:onPressed,
    onLongPress:onLongPress,
    onHover:onHover,
    onFocusChange:onFocusChange,
    ...

說實(shí)話寫起來(lái)確實(shí)很繁瑣插佛,簡(jiǎn)直就是廢話一般!升級(jí)到 Dart 2.17后量窘,使用 super 關(guān)鍵字直接引用即可雇寇,就像下面這樣,而且不需要在調(diào)用父類方法了,清爽太多了锨侯!

class OutlineButton extends ButtonStyleButton {
  const OutlineButton({
    super.key,
    super.onPressed,
    super.onLongPress,
    super.onHover,
    super.onFocusChange,
    super.style,
    super.focusNode,
    super.autofocus = false,
    super.clipBehavior = Clip.none,
    required Widget super.child,
  });
    ...
...
}

隨處可見的命名參數(shù)優(yōu)化

之前版本中嫩海,命名參數(shù)需要在匿名參數(shù)后面,這種寫法需要我們知道前面的參數(shù)囚痴,必須嚴(yán)格按照次序去寫代碼叁怪,一方面是寫代碼的時(shí)候需要知道參數(shù)次序,另一方面是有時(shí)候會(huì)導(dǎo)致代碼可讀性下降∩罟觯現(xiàn)在的話可以將命名參數(shù)提前到任意位置(但是匿名參數(shù)還是需要按次序)奕谭,以 List.generate 方法為例,我們對(duì)比一下:

//之前的寫法:growable 必須放在后面
final factorials = List<int>.generate(
  10,
  (int i) {
    if (i == 0) {
      return 1;
    } else {
      var result = 1;
      for (var r = 2; r <= i; ++r) {
        result *= r;
      }
      return result;
    }
  },
  growable: true,
);

// Dart 2.17后痴荐,growabe位置可以提前
final factorials = List<int>.generate(
  10,
  growable: true,
  (int i) {
    if (i == 0) {
      return 1;
    } else {
      var result = 1;
      for (var r = 2; r <= i; ++r) {
        result *= r;
      }
      return result;
    }
  },
);

生產(chǎn)力工具

一個(gè)是代碼檢查工具的升級(jí)血柳,Dart 代碼檢查工具增加了10條新的規(guī)范,還為Flutter 開發(fā)增加了2條特定的規(guī)范生兆∧寻疲可以通過下面的命令進(jìn)行升級(jí):

# Dart 開發(fā)
dart pub upgrade —-major-versions lints

# Flutter 開發(fā)
flutter pub upgrade —-major-versions flutter_lints

對(duì)于加密的 Socket (SecureSockets)調(diào)試增加了加密數(shù)據(jù)查看的支持,具體來(lái)說就是通過指定一個(gè) keyLog 文件鸦难,當(dāng)和服務(wù)端交換 TLS 密鑰的時(shí)候根吁,以 NSS Key Log Format(一種Mozila 定義的格式)的一行文本會(huì)添加到這個(gè)文件中,這使得一些網(wǎng)絡(luò)流量分析工具(例如 WireShark)可以將 socket 發(fā)送的內(nèi)容進(jìn)行解密明刷,從而方便調(diào)試婴栽。 具體可以查看 SecureSocket.connect()的 API文檔。
此外辈末, Dart 開發(fā)團(tuán)隊(duì)聽取了開發(fā)者更喜歡閱讀示例的方式理解 API 的建議愚争,在核心庫(kù)最常用的200個(gè) API 中增加了示例代碼,使得閱讀和理解 API 更容易挤聘。
對(duì)于棄用的代碼特性(共231條)轰枝,可以通過 dart fix 命令直接替換。

Dart FFI

Dart FFI 是用于 Dart 代碼和C語(yǔ)言/原生代碼交互的機(jī)制组去。當(dāng)需要使用原生 API 開發(fā) Flutter 插件時(shí)鞍陨,使用 Dart FFI會(huì)更方便。Dart 2.17為了簡(jiǎn)化這樣的開發(fā)工作从隆,在 Flutter 中提供了模板代碼诚撵,具體可以到官網(wǎng)了解如何使用:開發(fā)軟件包和插件指南

總結(jié)

這就是Dart 2.17的新特性介紹键闺,可以看到目前 Dart 團(tuán)隊(duì)主要集中在跨平臺(tái)和生產(chǎn)力提升上寿烟。說明整個(gè) Dart 語(yǔ)言已經(jīng)到了穩(wěn)定的階段,接下來(lái)的更新迭代將會(huì)讓我們的開發(fā)效率更高辛燥。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末筛武,一起剝皮案震驚了整個(gè)濱河市缝其,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌徘六,老刑警劉巖内边,帶你破解...
    沈念sama閱讀 211,123評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異待锈,居然都是意外死亡漠其,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,031評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門竿音,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)辉懒,“玉大人,你說我怎么就攤上這事谍失。” “怎么了莹汤?”我有些...
    開封第一講書人閱讀 156,723評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵快鱼,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我纲岭,道長(zhǎng)抹竹,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,357評(píng)論 1 283
  • 正文 為了忘掉前任止潮,我火速辦了婚禮窃判,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘喇闸。我一直安慰自己袄琳,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,412評(píng)論 5 384
  • 文/花漫 我一把揭開白布燃乍。 她就那樣靜靜地躺著唆樊,像睡著了一般。 火紅的嫁衣襯著肌膚如雪刻蟹。 梳的紋絲不亂的頭發(fā)上逗旁,一...
    開封第一講書人閱讀 49,760評(píng)論 1 289
  • 那天,我揣著相機(jī)與錄音舆瘪,去河邊找鬼片效。 笑死,一個(gè)胖子當(dāng)著我的面吹牛英古,可吹牛的內(nèi)容都是我干的淀衣。 我是一名探鬼主播,決...
    沈念sama閱讀 38,904評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼哺呜,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼舌缤!你這毒婦竟也來(lái)了箕戳?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,672評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤国撵,失蹤者是張志新(化名)和其女友劉穎陵吸,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體介牙,經(jīng)...
    沈念sama閱讀 44,118評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡壮虫,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,456評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了环础。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片囚似。...
    茶點(diǎn)故事閱讀 38,599評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖线得,靈堂內(nèi)的尸體忽然破棺而出饶唤,到底是詐尸還是另有隱情,我是刑警寧澤贯钩,帶...
    沈念sama閱讀 34,264評(píng)論 4 328
  • 正文 年R本政府宣布募狂,位于F島的核電站,受9級(jí)特大地震影響角雷,放射性物質(zhì)發(fā)生泄漏祸穷。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,857評(píng)論 3 312
  • 文/蒙蒙 一勺三、第九天 我趴在偏房一處隱蔽的房頂上張望雷滚。 院中可真熱鬧,春花似錦吗坚、人聲如沸祈远。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,731評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)绊含。三九已至,卻和暖如春炊汹,著一層夾襖步出監(jiān)牢的瞬間躬充,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,956評(píng)論 1 264
  • 我被黑心中介騙來(lái)泰國(guó)打工讨便, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留充甚,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,286評(píng)論 2 360
  • 正文 我出身青樓霸褒,卻偏偏與公主長(zhǎng)得像伴找,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子废菱,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,465評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容