En aquest tema, aprendrem com crear i publicar els nostres propis paquets en Dart. Els paquets són una manera excel·lent de modularitzar el codi, compartir-lo amb altres desenvolupadors i reutilitzar-lo en diferents projectes. A més, veurem com estructurar un paquet, definir les seves dependències i publicar-lo al repositori de paquets de Dart, pub.dev.

  1. Introducció als Paquets

Què és un paquet?

Un paquet és una col·lecció de codi, recursos i metadades que es poden compartir i reutilitzar. Els paquets poden contenir biblioteques, aplicacions, eines i altres recursos.

Per què utilitzar paquets?

  • Reutilització del codi: Facilita la reutilització del codi en diferents projectes.
  • Modularització: Permet dividir el codi en mòduls més petits i manejables.
  • Col·laboració: Facilita la col·laboració amb altres desenvolupadors.
  • Distribució: Permet compartir el codi amb la comunitat mitjançant pub.dev.

  1. Estructura d'un Paquet

Un paquet de Dart té una estructura específica. A continuació, es mostra l'estructura bàsica d'un paquet:

my_package/
├── lib/
│   ├── src/
│   │   └── my_package_base.dart
│   └── my_package.dart
├── test/
│   └── my_package_test.dart
├── example/
│   └── my_package_example.dart
├── pubspec.yaml
└── README.md

Descripció dels fitxers i directoris:

  • lib/: Conté el codi font del paquet.
    • src/: Conté els fitxers de codi font privats.
    • my_package.dart: Punt d'entrada públic del paquet.
  • test/: Conté les proves del paquet.
  • example/: Conté exemples d'ús del paquet.
  • pubspec.yaml: Fitxer de configuració del paquet.
  • README.md: Documentació del paquet.

  1. Creació del Paquet

Pas 1: Crear el Directori del Paquet

Crea un directori per al teu paquet i navega fins a ell:

mkdir my_package
cd my_package

Pas 2: Crear el Fitxer pubspec.yaml

El fitxer pubspec.yaml conté la informació del paquet, com ara el nom, la versió, les dependències, etc. Crea un fitxer pubspec.yaml amb el següent contingut:

name: my_package
description: A new Dart package.
version: 0.0.1
environment:
  sdk: '>=2.12.0 <3.0.0'

dependencies:
  # Afegeix les dependències aquí

dev_dependencies:
  # Afegeix les dependències de desenvolupament aquí

Pas 3: Crear el Directori lib i el Fitxer my_package.dart

Crea el directori lib i el fitxer my_package.dart:

mkdir lib
touch lib/my_package.dart

Afegeix el següent codi al fitxer lib/my_package.dart:

library my_package;

export 'src/my_package_base.dart';

Pas 4: Crear el Directori src i el Fitxer my_package_base.dart

Crea el directori src i el fitxer my_package_base.dart:

mkdir lib/src
touch lib/src/my_package_base.dart

Afegeix el següent codi al fitxer lib/src/my_package_base.dart:

class MyPackage {
  String greet(String name) {
    return 'Hello, $name!';
  }
}

Pas 5: Crear el Directori test i el Fitxer my_package_test.dart

Crea el directori test i el fitxer my_package_test.dart:

mkdir test
touch test/my_package_test.dart

Afegeix el següent codi al fitxer test/my_package_test.dart:

import 'package:my_package/my_package.dart';
import 'package:test/test.dart';

void main() {
  test('greet returns a greeting message', () {
    final myPackage = MyPackage();
    expect(myPackage.greet('World'), 'Hello, World!');
  });
}

Pas 6: Crear el Directori example i el Fitxer my_package_example.dart

Crea el directori example i el fitxer my_package_example.dart:

mkdir example
touch example/my_package_example.dart

Afegeix el següent codi al fitxer example/my_package_example.dart:

import 'package:my_package/my_package.dart';

void main() {
  final myPackage = MyPackage();
  print(myPackage.greet('World'));
}

  1. Publicació del Paquet

Pas 1: Registrar-se a pub.dev

Abans de publicar el paquet, has de registrar-te a pub.dev i obtenir un token d'autenticació.

Pas 2: Validar el Paquet

Abans de publicar el paquet, assegura't que compleix amb les normes de pub.dev. Pots utilitzar la comanda següent per validar el paquet:

dart pub publish --dry-run

Pas 3: Publicar el Paquet

Si el paquet passa la validació, pots publicar-lo amb la comanda següent:

dart pub publish

  1. Resum

En aquest tema, hem après com crear i estructurar un paquet de Dart, definir les seves dependències i publicar-lo a pub.dev. Els paquets són una eina poderosa per modularitzar el codi, compartir-lo amb altres desenvolupadors i reutilitzar-lo en diferents projectes. Amb aquesta base, estàs preparat per crear i publicar els teus propis paquets en Dart.

Exercicis Pràctics

Exercici 1: Crear un Paquet Simple

Crea un paquet anomenat simple_package que contingui una classe SimpleCalculator amb mètodes per sumar, restar, multiplicar i dividir dos nombres. Escriu proves per a cada mètode i un exemple d'ús.

Exercici 2: Publicar un Paquet

Crea un paquet anomenat greeting_package que contingui una classe Greeter amb un mètode greet que retorni un missatge de salutació. Publica el paquet a pub.dev.

Solucions

Solució a l'Exercici 1

Directori del Paquet:

simple_package/
├── lib/
│   ├── src/
│   │   └── simple_calculator.dart
│   └── simple_package.dart
├── test/
│   └── simple_calculator_test.dart
├── example/
│   └── simple_calculator_example.dart
├── pubspec.yaml
└── README.md

Fitxer pubspec.yaml:

name: simple_package
description: A simple calculator package.
version: 0.0.1
environment:
  sdk: '>=2.12.0 <3.0.0'

Fitxer lib/simple_package.dart:

library simple_package;

export 'src/simple_calculator.dart';

Fitxer lib/src/simple_calculator.dart:

class SimpleCalculator {
  double add(double a, double b) => a + b;
  double subtract(double a, double b) => a - b;
  double multiply(double a, double b) => a * b;
  double divide(double a, double b) {
    if (b == 0) {
      throw ArgumentError('Cannot divide by zero');
    }
    return a / b;
  }
}

Fitxer test/simple_calculator_test.dart:

import 'package:simple_package/simple_package.dart';
import 'package:test/test.dart';

void main() {
  final calculator = SimpleCalculator();

  test('add', () {
    expect(calculator.add(2, 3), 5);
  });

  test('subtract', () {
    expect(calculator.subtract(5, 3), 2);
  });

  test('multiply', () {
    expect(calculator.multiply(2, 3), 6);
  });

  test('divide', () {
    expect(calculator.divide(6, 3), 2);
  });

  test('divide by zero', () {
    expect(() => calculator.divide(6, 0), throwsArgumentError);
  });
}

Fitxer example/simple_calculator_example.dart:

import 'package:simple_package/simple_package.dart';

void main() {
  final calculator = SimpleCalculator();
  print('2 + 3 = ${calculator.add(2, 3)}');
  print('5 - 3 = ${calculator.subtract(5, 3)}');
  print('2 * 3 = ${calculator.multiply(2, 3)}');
  print('6 / 3 = ${calculator.divide(6, 3)}');
}

Solució a l'Exercici 2

Segueix els passos descrits anteriorment per crear i publicar el paquet greeting_package amb una classe Greeter que contingui un mètode greet.

Directori del Paquet:

greeting_package/
├── lib/
│   ├── src/
│   │   └── greeter.dart
│   └── greeting_package.dart
├── test/
│   └── greeter_test.dart
├── example/
│   └── greeter_example.dart
├── pubspec.yaml
└── README.md

Fitxer pubspec.yaml:

name: greeting_package
description: A package for greeting.
version: 0.0.1
environment:
  sdk: '>=2.12.0 <3.0.0'

Fitxer lib/greeting_package.dart:

library greeting_package;

export 'src/greeter.dart';

Fitxer lib/src/greeter.dart:

class Greeter {
  String greet(String name) {
    return 'Hello, $name!';
  }
}

Fitxer test/greeter_test.dart:

import 'package:greeting_package/greeting_package.dart';
import 'package:test/test.dart';

void main() {
  final greeter = Greeter();

  test('greet', () {
    expect(greeter.greet('World'), 'Hello, World!');
  });
}

Fitxer example/greeter_example.dart:

import 'package:greeting_package/greeting_package.dart';

void main() {
  final greeter = Greeter();
  print(greeter.greet('World'));
}

Segueix els passos per validar i publicar el paquet a pub.dev.

© Copyright 2024. Tots els drets reservats