Як посилатися на інший файл у Dart?


80

Я знаю, що ти можеш використовувати library, importі навіть #import, але що правильно?

У мене є два файли, MainClass.dartі Library.Dart, і я хочу додати посилання на Library.dartв MainClass.dart. Як я можу це зробити?

Відповіді:


122

По-перше, дозвольте мені просто вступити до цього, сказавши, будь ласка, не використовуйте хеш-символ перед імпортом, бібліотекою чи будь-чим іншим. Це старий синтаксис, який не підтримується. Тому ми більше не хочемо використовувати #import('...')правильний синтаксис:

import 'some_file.dart';

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

Зазвичай, якщо ваші файли знаходяться в одному каталозі або підкаталозі поточного, ми імпортуємо їх таким чином:

import 'lib/library.dart';

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

Інша важлива річ, яку слід знати про перенесення файлу дротиків в інший файл, - це те, що ми можемо використовувати директиви partand 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директиву в нашому секретному_файлі.dart, щоб допомогти редактору зрозуміти, що вона є "частиною" бібліотеки.

// secret_file.dart
part of awesome_library;

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

Зверніть увагу, що при використанні такого файлу частин (частин) (тобто всього, що не є основним файлом бібліотеки) не можуть імпортувати або використовувати самі декларації бібліотеки. Вони імпортують все, що імпортується в основний файл, але не можуть додавати додаткові імпорти.

Для отримання додаткової інформації про бібліотеку див. Це посилання.


22

Імпорт власних створених бібліотек: Ви будете імпортувати, 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;
}

а якщо у вас немає бібліотеки, а просто новий файл Dart з класами, це все одно буде працювати?
Steoates

Як я пам’ятаю, у дартсі - це все бібліотека. Навіть ваша програма з main (). Але я пам’ятаю, що у мене були такі ж думки, як і у вас :). Навіщо мені lib, якщо я просто хочу створити об'єкт з іншого класу / файлу. Але це працює.
Геро,

1
Тільки для підтвердження - це лише бібліотека, якщо у вас є визначення «бібліотека» вгорі. Сценарій може мати функцію main (), не будучи бібліотекою.
Кріс Бакетт,

12

Хоча я відповідаю дуже пізно, але відповідь може допомогти новому розробнику.

Завжди використовуйте файл pubspec.yaml у своєму дартс-пакеті (програмі / бібліотеці).

Після запуску команди pub get вона додасть вашу локальну бібліотеку до списку залежностей у файлі .packages.

Подумайте, у мене є така структура проекту.

введіть тут опис зображення

Для посилання на зміст привітання.dart у моєму файлі main.dart я повинен додати бібліотеку, як показано нижче

import 'package:my_project_name/greeting.dart'

Після імпортування ми можемо використовувати вміст файлу привітання.dart у нашому файлі main.dart. Примітка: ми не використовували фактичний шлях, оскільки ви бачите, що каталог 'lib' відсутній.


коли ви створюєте екземпляр будь-якого об'єкта класу у цьому файлі, IDE автоматично генерує шлях імпорту для вас. Не потрібно вводити текст.
prachit

0

Спочатку переконайтеся, що це ім’я, яке ви згадали, pubspec.yaml і файл, який ви хочете імпортувати, мають однакове ім’я

приклад:

pubspec.yaml

name: flutter_wordpress_app
description: flutter wordpress app
...
....
// dirOne/dirTwo/greeting.dart

class FavArticleBloc {
   // Your code goes here
}


import 'package:flutter_wordpress_app/dirOne/dirTwo/greeting.dart'

void main(){ 
  var some = new FavArticleBloc(); 
}

Але в цьому main.dartне потрібно вказувати, import 'package:flutter_wordpress_app просто робіть, як показано нижче

import 'dirOne/dirTwo/greeting.dart
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.