Saltar al contenido

¿Cómo utilizo las funciones de extensión de Dart?

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);
}
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *