Métodos de extensión de Flutter: una guía con ejemplos

May 07 2023
Si está buscando crear aplicaciones que puedan funcionar en múltiples plataformas, Flutter es un gran marco a considerar. Utiliza el lenguaje de programación Dart y tiene una característica llamada "métodos de extensión" que lo hace realmente flexible.

Si está buscando crear aplicaciones que puedan funcionar en múltiples plataformas, Flutter es un gran marco a considerar. Utiliza el lenguaje de programación Dart y tiene una característica llamada "métodos de extensión" que lo hace realmente flexible. Con los métodos de extensión, puede agregar nuevas funciones a los tipos de código existentes sin tener que realizar cambios importantes. Esto ahorra tiempo y facilita la administración de su código.

En esta publicación de blog, exploraremos qué son los métodos de extensión, cómo usarlos y algunos ejemplos de cómo pueden mejorar su código de Flutter.

¿Qué son los métodos de extensión?

Los métodos de extensión son una forma de agregar nuevos métodos a los tipos existentes sin cambiar su código fuente ni crear subclases. Se declaran con la palabra clave `extensión` seguida de un nombre y el tipo que extienden. Por ejemplo, supongamos que queremos agregar un método llamado `isEven` al tipo `int` que devuelve verdadero si el número es par y falso en caso contrario. Podemos escribir un método de extensión como este:

extension IntExtensions on int {
  bool get isEven => this % 2 == 0;
}

int x = 42;
print(x.isEven); // true

extension StringExtensions on String {
  String repeat(int n) {
  String result = '';
    for (int i = 0; i < n; i++) {
      result += this;
    }
    return result;
  }
}

String s = 'Hello';
print(s.repeat(3)); // HelloHelloHello

Los métodos de extensión pueden ser útiles en Flutter para agregar nuevas funciones a widgets, modelos u otros tipos existentes. Por ejemplo, supongamos que tenemos una clase modelo llamada `Usuario` que representa a un usuario en nuestra aplicación:

class User {
  final String name;
  final int age;
  final String email;
  User(this.name, this.age, this.email);
}

extension UserExtensions on User {
  Widget toCard() {
      return Card(
        child: ListTile(
        leading: Icon(Icons.person),
        title: Text(name),
        subtitle: Text('$age years old'),
        trailing: Text(email),
    ),);
  }
}

User user = User('UserName', 27, '[email protected]');
Widget card = user.toCard();

Otro ejemplo del uso de métodos de extensión en Flutter es agregar nuevas propiedades o métodos a los widgets existentes. Por ejemplo, supongamos que queremos agregar una propiedad llamada `borderRadius` al widget `Container` que establece el radio del borde de su decoración. Podemos escribir un método de extensión como este:

extension ContainerExtensions on Container {
  Container get borderRadius => this.copyWith(
      decoration: BoxDecoration(
        borderRadius: BorderRadius.circular(10),
    ),
  );
}

Container container = Container(
  color: Colors.blue,
  width: 100,
  height: 100,
);
Container roundedContainer = container.borderRadius;

Consulte estos útiles ejemplos de extensiones de Flutter para usar en producción.

Ejemplo 1: esta extensión devuelve el primer elemento de la lista o nulo si la lista está vacía.

extension ListExtension<T> on List<T> {
  T firstOrNull() => this.isEmpty ? null : this.first;
}

extension MyStringExtensions on String {
  String capitalize() {
    return "${this[0].toUpperCase()}${this.substring(1)}";
  }
}

extension ImageExtension on Image {
  double get aspectRatio => width / height;
}

extension StringExtension on String {
  dynamic parseJson() => json.decode(this);
}

extension WidgetExtension on Widget {
  void showSnackbar(BuildContext context, String message) {
    ScaffoldMessenger.of(context).showSnackBar(SnackBar(
      content: Text(message),
    ));
  }
}

extension NavigatorExtension on BuildContext {
  void navigateTo(String routeName, {Object arguments}) {
    Navigator.pushNamed(this, routeName, arguments: arguments);
  }
}

Los métodos de extensión son una característica poderosa de Dart que le permite agregar nuevas funciones a los tipos existentes sin modificarlos ni crear subclases. Pueden ser útiles en Flutter para agregar nuevas funciones a widgets, modelos u otros tipos existentes. Los métodos de extensión pueden mejorar su código Flutter haciéndolo más expresivo, modular y reutilizable.