Solución:
Ahora hay un video oficial del equipo de Flutter sobre los métodos de extensión.
Miembros de extensión estáticos
Aquí hay un ejemplo intuitivo de cómo funcionan los métodos de extensión:
extension FancyNum on num {
num plus(num other) => this + other;
num times(num other) => this * other;
}
Yo simplemente extiendo num
aquí y agregue métodos a la clase. Esto podría usarse así:
print(5.plus(3)); // Equal to "5 + 3".
print(5.times(8)); // Equal to "5 * 8".
print(2.plus(1).times(3)); // Equal to "(2 + 1) * 3".
Tenga en cuenta que el nombre FancyNum
es opcional y lo siguiente también es válido:
extension on num {}
Cuando usa su extensión en otro archivo, debe Dale un nombre.
La extensión anterior hará uso de invocaciones implícitas de miembros de extensión, ya que no tiene que declarar explícitamente su num
ser un FancyNum
.
También puede declarar explícitamente su extensión, pero esto no es necesario en la mayoría de los casos:
print(FancyNum(1).plus(2));
Cuenta infantil flexible
El comportamiento deseado de la pregunta se puede lograr extendiendo Row
o Column
, o mejor aún: puedes extender Flex
, que es la superclase de Row
y Column
:
extension ExtendedFlex on Flex {
int get childCount => this.children.length;
}
this.
también se puede omitir si children
no está definido en el ámbito léxico actual de childCount
, Lo que significa que => children.length
también es válido.
Con este extensión estática de Flex
importado, puede llamarlo en cualquier Flex
, es decir, también en cada Row
y Column
.
Row(children: const [Text('one'), Text('two')]).childCount
evaluará a 2
.
Dart 2.7 introdujo un nuevo concepto de método de extensión.
https://dart.dev/guides/language/extension-methods
extension ParseNumbers on String {
int parseInt() {
return int.parse(this);
}
double parseDouble() {
return double.parse(this);
}
}
main() {
int i = '42'.parseInt();
print(i);
}