Metody rozszerzania trzepotania: przewodnik z przykładami

May 07 2023
Jeśli chcesz tworzyć aplikacje, które mogą działać na wielu platformach, Flutter to świetny framework do rozważenia. Wykorzystuje język programowania Dart i ma funkcję zwaną „metodami rozszerzającymi”, która czyni go naprawdę elastycznym.

Jeśli chcesz tworzyć aplikacje, które mogą działać na wielu platformach, Flutter to świetny framework do rozważenia. Wykorzystuje język programowania Dart i ma funkcję zwaną „metodami rozszerzającymi”, która czyni go naprawdę elastycznym. Dzięki metodom rozszerzającym można dodawać nowe funkcje do istniejących typów kodu bez konieczności wprowadzania większych zmian. Oszczędza to czas i ułatwia zarządzanie kodem.

W tym poście na blogu przyjrzymy się, jakie są metody rozszerzające, jak ich używać i przedstawimy kilka przykładów, w jaki sposób mogą one ulepszyć Twój kod Fluttera.

Czym są metody rozszerzające?

Metody rozszerzające to sposób dodawania nowych metod do istniejących typów bez zmiany ich kodu źródłowego lub tworzenia podklas. Są deklarowane za pomocą słowa kluczowego `extension`, po którym następuje nazwa i typ, który rozszerzają. Załóżmy na przykład, że chcemy dodać metodę o nazwie `isEven` do typu `int`, która zwraca true, jeśli liczba jest parzysta, lub false w przeciwnym przypadku. Możemy napisać metodę rozszerzenia w następujący sposób:

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

Metody rozszerzające mogą być przydatne we Flutterze do dodawania nowych funkcji do istniejących widżetów, modeli lub innych typów. Załóżmy na przykład, że mamy klasę modelu o nazwie `Użytkownik`, która reprezentuje użytkownika w naszej aplikacji:

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();

Innym przykładem wykorzystania metod rozszerzających we Flutterze jest dodanie nowych właściwości lub metod do istniejących widżetów. Załóżmy na przykład, że chcemy dodać właściwość o nazwie `borderRadius` do widżetu `Container`, który ustawia promień obramowania jego dekoracji. Możemy napisać metodę rozszerzenia w następujący sposób:

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;

Sprawdź te pomocne przykłady rozszerzeń Flutter do wykorzystania w środowisku produkcyjnym.

Przykład 1: To rozszerzenie zwraca pierwszy element listy lub wartość null, jeśli lista jest pusta.

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);
  }
}

Metody rozszerzające to potężna funkcja Dart, która pozwala dodawać nowe funkcje do istniejących typów bez modyfikowania ich lub tworzenia podklas. Mogą być przydatne we Flutterze do dodawania nowych funkcji do istniejących widżetów, modeli lub innych typów. Metody rozszerzające mogą ulepszyć kod Fluttera, czyniąc go bardziej wyrazistym, modułowym i nadającym się do wielokrotnego użytku.