正文
如何在Dart中使用Extension
寫出乾淨整潔的程式碼?
Dart最近宣佈支援Extension方法,你也可以在專案中使用這個牛X的功能了!!!本文旨在展示我是如何在專案中使用Extension
方法的。
在我的Flutter專案中,我經常使用Enum,但是整合Enum
和Extension
方法會讓程式碼變得更簡潔易讀。
假設你寫了一個Enum,然後你根據這個Enum的值返回不同的文字。在以前,我會使用IIFE(media post)在widget
中使用switch
語句,在函式表示式中呼叫匿名方法,雖然在Dart中這很常用,但這種模式會產生很多面條式程式碼,如下例所示。另外,如果需要在其他地方新增相同的文字,則必須複製整個程式碼片段,而不是僅僅進行函式呼叫。
Text((){
switch (selectedColor) {
case SelectedColor.PrimaryColor:
return 'This is the Primary Color';
case SelectedColor.SecondaryColor:
return 'This is the Secondary Color';
default:
return 'SelectedScheme Title is null';
}
}()),
Text((){
switch (selectedColor) {
case SelectedColor.PrimaryColor:
return 'This is the Primary Color';
case SelectedColor.SecondaryColor:
return 'This is the Secondary Color';
default:
return 'SelectedScheme Title is null';
}
}()),
複製程式碼
另外,如果你想要根據Enum值修改文字,你甚至需要給PrimaryColor
和SecondaryColor
再寫一個IIFE。
現在,你不用為此而煩惱,你只需要擴充套件你的Enum
並實現一個擴充套件方法就可以搞定這一切。使用這種方式可以實現相同的功能,並且程式碼更簡潔易讀。擴充套件列舉對Java開發者非常重要,列舉本應支援擴充套件!
enum SelectedColor {
primaryColor,
secondaryColor,
}
extension SelectedColorExtension on SelectedColor {
String get name => describeEnum(this);
String get displayTitle {
switch (this) {
case SelectedColor.PrimaryColor:
return 'This is the Primary Color';
case SelectedColor.SecondaryColor:
return 'This is the Secondary Color';
default:
return 'SelectedScheme Title is null';
}
}
}
複製程式碼
Flutter Foundation
中定義的describeEnum()
函式從enumEntry.toString()
返回值中中剝離了列舉類名,僅返回了列舉值的字串。我提供了一個自定義的替代實現,你可以將它用於其他Dart
專案。
String describeEnum(Object enumEntry) {
final String description = enumEntry.toString();
final int indexOfDot = description.indexOf('.');
assert(indexOfDot != -1 && indexOfDot < description.length - 1);
return description.substring(indexOfDot + 1);
}
複製程式碼
在示例程式碼中,我給列舉擴充套件了4個方法displayTitle()
, displayColorChangeText()
, color()
, 和getRandomSelectedColor()
。當呼叫displayTitle()
方法時,你會發現明顯比IIFE更模組化,更簡潔,更新列舉新增新列舉值也會變得更加容易,新增新的擴充套件方法也非常容易,比如新增color()
函式來改變文字顏色,只需要在Extension
新增新方法就可以了。
Flutter Gallery
中使用handling category demos
來演示Enum
中使用Extension
。
結束語
Extension Method是Dart
中的一個強大工具,使用它你可以寫出更簡潔易讀、更易擴充套件的程式碼。
學習更多的Dart設計模式,請看3 Cool Dart Patterns for everyday programming in Flutter