Ключевое слово export
Ключевое слово export позволяет одной библиотеке
предоставлять содержимое другой библиотеки как своё
собственное. Это значит, что тот, кто импортирует
вашу библиотеку, автоматически получит доступ ко всем
публичным сущностям экспортируемой библиотеки, как
если бы они были объявлены внутри вашей.
После ключевого слова указывается путь к библиотеке,
которую нужно реэкспортировать. Дополнительно можно
использовать комбинаторы show и hide,
чтобы ограничить список экспортируемых имён, а также
ключевое слово as для создания префикса.
В отличие от import, который подключает
библиотеку в текущий файл для использования,
export не даёт текущей библиотеке прямого
доступа к именам. Он лишь сообщает Dart, какие
сущности должны быть видны тем, кто импортирует
текущую библиотеку.
Синтаксис
export 'path/to/library.dart';
export 'path/to/library.dart' show name1, name2;
export 'path/to/library.dart' hide name1, name2;
export 'path/to/library.dart' as prefix;
Пример
Предположим, у нас есть файл math_utils.dart
с полезными функциями:
// math_utils.dart
int sum(int a, int b)
{
return a + b;
}
int multiply(int a, int b)
{
return a * b;
}
Теперь создадим библиотеку utils.dart, которая
реэкспортирует содержимое math_utils.dart:
// utils.dart
export 'math_utils.dart';
Теперь любой файл, импортирующий utils.dart,
получит доступ к функциям sum и
multiply:
// main.dart
import 'utils.dart';
void main()
{
print(sum(2, 3));
print(multiply(2, 3));
}
Результат выполнения кода:
5
6
Пример
Давайте ограничим экспорт только функцией sum
с помощью комбинатора show:
// utils.dart
export 'math_utils.dart' show sum;
Теперь функция multiply не будет доступна
через utils.dart. Попробуем её вызвать:
// main.dart
import 'utils.dart';
void main()
{
print(sum(2, 3));
print(multiply(2, 3));
}
Такой код вызовет ошибку компиляции, потому что
имя multiply не экспортируется из
utils.dart.
Пример
А теперь используем комбинатор hide, чтобы
скрыть функцию multiply и оставить всё
остальное:
// utils.dart
export 'math_utils.dart' hide multiply;
// main.dart
import 'utils.dart';
void main()
{
print(sum(2, 3));
}
Результат выполнения кода:
5
Пример
Если нужно экспортировать библиотеку под префиксом,
используется ключевое слово as. Это удобно,
когда несколько библиотек содержат одинаковые имена:
// utils.dart
export 'math_utils.dart' as math;
// main.dart
import 'utils.dart';
void main()
{
print(math.sum(2, 3));
print(math.multiply(2, 3));
}
Результат выполнения кода:
5
6