Директивы import
и library
могут помочь вам создать модульную и разделяемую базу кода. Библиотеки не только предоставляют API-интерфейсы, но и являются элементом конфиденциальности: идентификаторы, которые начинаются со знака подчеркивания (_
), видны только внутри библиотеки. Каждое приложение Dart является библиотекой, даже если оно не использует директиву библиотеки library
.
Библиотеки могут распространяться с использованием пакетов.
Использование библиотек
Используйте импорт import
, чтобы указать, как пространство имен из одной библиотеки используется в области действия другой библиотеки.
Например, веб-приложения Dart обычно используют библиотеку dart: html, которую они могут импортировать следующим образом:
import 'dart:html';
Указание префикса библиотеки
Если вы импортируете две библиотеки с конфликтующими идентификаторами, вы можете указать префикс для одной или обеих библиотек. Например, если library1
и library2
оба имеют класс Element
, то у вас может быть такой код:
import 'package:lib1/lib1.dart';
import 'package:lib2/lib2.dart' as lib2;
// Uses Element from lib1.
Element element1 = Element();
// Uses Element from lib2.
lib2.Element element2 = lib2.Element();
Импорт только части библиотеки
Если вы хотите использовать только часть библиотеки, вы можете выборочно импортировать библиотеку. Например:
// Import only foo.
import 'package:lib1/lib1.dart' show foo;
// Import all names EXCEPT foo.
import 'package:lib2/lib2.dart' hide foo;
Библиотека с отложенной загрузкой(lazily loading)
Отложенная загрузка (также называемая отложенной загрузкой) позволяет веб-приложению загружать библиотеку по требованию, если и когда она необходима. Вот несколько случаев, когда вы можете использовать отложенную загрузку:
- Чтобы уменьшить начальное время запуска веб-приложения.
- Выполнить A / B-тестирование — например, попробовать альтернативные реализации алгоритма.
- Для загрузки редко используемых функций, таких как дополнительные экраны и диалоги.
Чтобы отложено загрузить библиотеку, вы должны сначала импортировать ее, используя deferred as
import 'package:greetings/hello.dart' deferred as hello;
Когда вам нужна библиотека, вызовите loadLibrary()
, используя идентификатор библиотеки
Future greet() async {
await hello.loadLibrary();
hello.printGreeting();
}
В предыдущем коде ключевое слово await
приостанавливает выполнение до загрузки библиотеки. Для получения дополнительной информации об async
и await
см. Поддержку асинхронности.
Вы можете вызывать loadLibrary()
несколько раз в библиотеке без проблем. Библиотека загружается только один раз.
При использовании отложенной загрузки помните следующее:
- Константы отложенной библиотеки не являются константами в импортируемом файле. Помните, что эти константы не существуют, пока не будет загружена отложенная библиотека.
- Вы не можете использовать типы из отложенной библиотеки в импортируемом файле. Вместо этого рассмотрите возможность перемещения типов интерфейса в библиотеку, импортированную как отложенной библиотекой, так и импортирующим файлом.
- Dart неявно вставляет
loadLibrary()
в пространство имен, которое вы определяете, используяdeferred as
namespace
. ФункцияloadLibrary()
возвращает Future.
Реализация библиотек
Посмотрите Создание Библиотечных пакетов для совета относительно того, как реализовать пакет библиотеки, включая:
- Как организовать исходный код библиотеки
- Как использовать директиву
export
- Когда использовать директиву
part
- Когда использовать директиву
library
.