extension這個(gè)語(yǔ)法糖在很多編程語(yǔ)言都有蕉饼,這個(gè)也是非常有用的擴(kuò)展現(xiàn)有類功能方法持钉。可以實(shí)現(xiàn)類似AOP切面編程的效果——不修改現(xiàn)有代碼擴(kuò)展出新功能炸茧。
常用擴(kuò)展——路由調(diào)用簡(jiǎn)化
extension WidgetRouteBuilder on BuildContext {
///顯示新[widget]
navigate(Widget widget) {
Navigator.of(this).push(MaterialPageRoute<void>(builder: (_) => widget));
}
void pop() {
Navigator.of(this).pop();
}
}
常用擴(kuò)展2——精簡(jiǎn)代碼
在下面擴(kuò)展中你可以看到extension bool簡(jiǎn)化得到溫度單位字符串的過(guò)程稿静,不需要什么if elese判斷也不在需要 isCelsius ? tempCelsius : tempFahrenheit這樣的表達(dá)式了
const tempCelsius = '°C';
const tempFahrenheit = '°F';
extension TempScaleUnit on bool {
String get tempScaleUnit {
return this ? tempCelsius : tempFahrenheit;
}
}
#用過(guò)表達(dá)式獲取
final unit = isCelsius ? tempCelsius : tempFahrenheit
#extension簡(jiǎn)化后
final unit = isCelsius.tempScaleUnit;
現(xiàn)成的輪子
Get:這個(gè)組件也基于BuildContext做了很多有用擴(kuò)展:
#擴(kuò)展theme獲取
context.theme
#擴(kuò)展字體主題獲取
context.textTheme
...