extension这个语法糖在很多编程语言都有,这个也是非常有用的扩展现有类功能方法。可以实现类似AOP切面编程的效果——不修改现有代码扩展出新功能。
常用扩展——路由调用简化
extension WidgetRouteBuilder on BuildContext {
///显示新[widget]
navigate(Widget widget) {
Navigator.of(this).push(MaterialPageRoute<void>(builder: (_) => widget));
}
void pop() {
Navigator.of(this).pop();
}
}
常用扩展2——精简代码
在下面扩展中你可以看到extension bool简化得到温度单位字符串的过程,不需要什么if elese判断也不在需要 isCelsius ? tempCelsius : tempFahrenheit这样的表达式了
const tempCelsius = '°C';
const tempFahrenheit = '°F';
extension TempScaleUnit on bool {
String get tempScaleUnit {
return this ? tempCelsius : tempFahrenheit;
}
}
#用过表达式获取
final unit = isCelsius ? tempCelsius : tempFahrenheit
#extension简化后
final unit = isCelsius.tempScaleUnit;
现成的轮子
Get:这个组件也基于BuildContext做了很多有用扩展:
#扩展theme获取
context.theme
#扩展字体主题获取
context.textTheme
...