export în Dart

Face ca numele dintr-o altă bibliotecă să fie disponibile și celor care importă biblioteca curentă.

Sintaxă
export 'src/fisier.dart';                    // re-exportă tot
export 'src/fisier.dart' show Nume1, Nume2;  // doar unele nume
export 'src/fisier.dart' hide Intern;

Ce face export

export se folosește într-un fișier „vitrină” al unui pachet (de obicei lib/nume_pachet.dart). Codul real stă în lib/src/, împărțit în mai multe fișiere, iar fișierul principal le re-exportă. Cine folosește pachetul scrie un singur import și primește tot.

Cu show și hide alegi ce devine public. Funcțiile ajutătoare din src/ pot rămâne ascunse, chiar dacă nu încep cu _.

export nu face numele disponibile în fișierul care exportă; dacă îl folosești și acolo, ai nevoie și de un import. Exemplul folosește mai multe fișiere, așa că rezultatul este cel obținut rulând proiectul local.

Exemple

Exemplul 1: Un pachet cu un fișier principal

main.dart importă doar magazin.dart, dar poate folosi cuTva și costLivrare.

// lib/src/preturi.dart
double cuTva(double pret) => pret * 1.21;

// lib/src/livrare.dart
double costLivrare(String oras) => oras == 'București' ? 15 : 25;
double taxaTotala() => 2;

// lib/magazin.dart
export 'src/preturi.dart';
export 'src/livrare.dart' show costLivrare;

// main.dart
import 'lib/magazin.dart';

void main() {
  print('Cafea cu TVA: ${cuTva(20).toStringAsFixed(2)} lei');
  print('Livrare în Cluj: ${costLivrare('Cluj')} lei');
}

Rezultat (proiect cu mai multe fișiere)

Cafea cu TVA: 24.20 lei
Livrare în Cluj: 25.0 lei

Exemplul 2: Un nume ascuns cu show

taxaTotala nu a fost inclus în show, deci nu este vizibil prin magazin.dart.

// main.dart
import 'lib/magazin.dart';

void main() {
  print(taxaTotala());
}

Rezultatul lui dart analyze

  error - main.dart:4:9 - The function 'taxaTotala' isn't defined. Try importing the library that defines 'taxaTotala', correcting the name to the name of an existing function, or defining a function named 'taxaTotala'. - undefined_function

Greșeli frecvente

  • Să importe utilizatorii direct din lib/src/: e considerat cod intern, care se poate schimba. Exportă ce este public din fișierul principal.
  • Să crezi că export face numele disponibile în fișierul curent: ai nevoie și de import.
  • Două fișiere exportate cu același nume public: conflict la import. Folosește hide sau show.

Comenzi înrudite

  • import: Face disponibile în fișierul curent numele publice ale altei biblioteci: din SDK, dintr-un pachet sau din proiect.
  • library: Directiva de la începutul unui fișier Dart care marchează biblioteca, pentru documentație sau adnotări.
  • part și part of: Împarte o singură bibliotecă în mai multe fișiere, care își văd reciproc și numele private.
  • dart create: Creează un proiect Dart nou dintr-un șablon: aplicație de consolă, pachet, server sau aplicație web.