Подтвердить что ты не робот

Как ссылаться на другой файл в Dart?

Это может показаться глупым вопросом, но я честно не знаю, я знаю, что вы можете использовать library, import и даже #import, но что правильно?

У меня есть два файла, MainClass.dart и Library.Dart, и я хочу добавить ссылку на Library.Dart в MainClass.dart. Как я могу это сделать?

4b9b3361

Ответ 1

Во-первых, позвольте мне просто предисловие к этому, сказав, пожалуйста, не используйте символ хэша перед импортом или библиотекой или что-то еще. Это старый синтаксис, который обесценивается. Поэтому мы больше не хотим использовать #import('...') Правильный синтаксис:

import 'some_file.dart';

Тем не менее, есть две разные вещи, которые мы можем сделать с доступом к различным исходным файлам дарт в нашем текущем файле. Первый - это import файл. Мы используем это, например, в вашем случае, когда вы хотите добавить другую библиотеку в текущий файл (или, точнее, текущую библиотеку).

Обычно, если ваши файлы находятся в одном каталоге или подкаталоге текущего, мы будем импортировать их следующим образом:

import 'lib/library.dart';

Однако, если вы используете макет пакета паба, вы также можете использовать некоторые специальные короткие ссылки для импорта файлов (особенно из других импортированных вами пакетов). Я настоятельно рекомендую читать документы на сайте pub, так как большинство приложений и библиотек разработаны с учетом этого. В нем также есть предложения по наилучшим соглашениям об именах, такие как имена файлов во всех нижних регистрах, а также использование подчеркивания для пробелов и макетов каталогов.

Другая важная вещь, связанная с приведением файла дарт файла в другой файл, заключается в том, что мы можем использовать директивы part и part of. Раньше это называлось #source, но было изменено (с удалением символа хэша), чтобы помочь с некоторой путаницей. Директива part используется, когда мы хотим написать одну библиотеку, которая охватывает несколько файлов. Скажем, например, у вас есть Awesome Library, которая начинает получать немного больше для одного файла. Мы создадим основной файл библиотеки (не путать с основным методом). Обычно этот файл имеет то же имя, что и сама библиотека.

// awesome_library.dart
library awesome_library;

import 'dart:math';
import '...';

// this injects all the content of secret_file.dart
// into this file right here almost as if it was
// here in the first place.
part 'src/secret_file.dart';

// The rest of our file here
// ...

Директива part в основном берет все из нашего src/secret_file.dart и вставляет его в эту часть файла. Это позволяет нам разбить нашу огромную Awesome Library на несколько небольших файлов, которые легче поддерживать. Хотя это специально не требуется, полезно использовать директиву part of в нашем файле secret_file.dart, чтобы помочь редактору узнать, что это "часть" библиотеки.

// secret_file.dart
part of awesome_library;

// ... Rest of our secret_file code below.

Обратите внимание, что при использовании файла детали, подобного этому, часть (то есть все, что не является основным файлом библиотеки) не может импортировать или использовать декларации библиотеки сами. Они импортируют все, что импортировано в основной файл, но они не могут добавить никаких дополнительных импортов.

Для получения дополнительной информации о библиотеке см. эту ссылку.

Ответ 2

Импорт собственных созданных библиотек: Вы импортируете filename.dart, а не имя вашей библиотеки. Итак, если имя вашей библиотеки: myLib и оно сохраняется в файле: someDartFile.dart вам придется

import 'someDartFile.dart';

Если у вас в Windows есть библиотека по адресу: K:\SomeDir\someFile.dart, вам нужно будет написать:

import '/K:/SomeDir/someFile.dart';

Пример:

import 'LibraryFile.dart'; //importing myLib

void main(){ 
  //a class from myLib in the LibraryFile.dart file
  var some = new SomeClassFromMyLibrary(); 
}

myLib в LibraryFile.dart:

library myLibrary;
import 'dart:math';

class SomeClassFromMyLibrary{
  String _str = "this is some private String only to myLibrary";
  String pubStr = "created instances of this class can access";
}

Вот полный пример.

//TestLib.dart
import 'LibFile.dart'; //SomeLibrary

void main() {
  print("Hello, World!");

  LibFile l = new LibFile();
  print(l.publicString);//public
  print(l.getPrivateString);//private  
  print(l.getMagicNumber); //42
}

//LibFile.dart
library SomeLibrary;
part 'LibFile2.dart';

class LibFile {
  String _privateString = "private";
  String publicString = "public";

  String get getPrivateString => _privateString;

  int get getMagicNumber => new LibFile2().number;
}

//LibFile2.dart
part of SomeLibrary;

class LibFile2 {
  int number = 42;
}