Wie verweise ich auf eine andere Datei in Dart?

79

Ich weiß , dass Sie das können library, importund sogar #import, aber die ist richtig?

Ich habe zwei Dateien MainClass.dartund Library.Dartmöchte einen Verweis auf Library.dartin hinzufügen MainClass.dart. Wie kann ich das machen?

Steoates
quelle

Antworten:

120

Lassen Sie mich zunächst nur vorab sagen, dass Sie das Hash-Symbol vor dem Import oder der Bibliothek oder etwas anderem nicht verwenden sollten. Dies ist eine alte Syntax, die veraltet ist. Wir wollen also nicht mehr verwenden. #import('...')Die richtige Syntax lautet:

import 'some_file.dart';

Es gibt jedoch zwei verschiedene Möglichkeiten, um auf verschiedene Dart-Quelldateien in unserer aktuellen Datei zuzugreifen. Der erste ist in importdie Datei. Wir verwenden dies beispielsweise in Ihrem Fall, wenn Sie eine andere Bibliothek in die aktuelle Datei (oder genauer die aktuelle Bibliothek) aufnehmen möchten.

Wenn sich Ihre Dateien im selben Verzeichnis oder in einem Unterverzeichnis des aktuellen befinden, werden sie normalerweise wie folgt importiert:

import 'lib/library.dart';

Wenn Sie jedoch das Layout des Pub-Pakets verwenden, können Sie auch einige spezielle Verknüpfungsreferenzen verwenden, um Dateien zu importieren (insbesondere aus anderen Paketen, die Sie importiert haben). Ich empfehle dringend, die zu lesen Dokumente auf der Pub-Site zu , da die meisten Anwendungen und Bibliotheken in diesem Sinne konzipiert sind. Es enthält auch Vorschläge zu den besten Namenskonventionen wie Dateinamen in Kleinbuchstaben sowie zur Verwendung von Unterstrichen für Leerzeichen und Verzeichnislayouts.

Die andere wichtige Sache, die Sie wissen müssen, um eine Dart-Datei in eine andere Datei zu bringen, ist, dass wir die Anweisungen partund verwenden können part of. Dies wurde früher aufgerufen, #sourceaber geändert (mit dem Entfernen des Hash-Zeichens), um Verwirrung zu vermeiden. Die partDirektive wird benutzt , wenn wir eine einzige Bibliothek schreiben möchten , die mehrere Dateien umfasst. Nehmen wir zum Beispiel an, Sie haben eine Awesome Library , die für eine einzelne Datei etwas größer wird. Wir werden die Hauptdatei der Bibliothek erstellen (nicht zu verwechseln mit der Hauptmethode). Diese Datei hat normalerweise den gleichen Namen wie die Bibliothek selbst.

// 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
// ...

Die part-Direktive nimmt im Grunde alles aus unserer src / secret_file.dart und fügt es in diesen Teil der Datei ein. Auf diese Weise können wir unsere riesige Awesome Library in mehrere kleinere Dateien aufteilen , die einfacher zu warten sind. Obwohl dies nicht ausdrücklich erforderlich ist, ist es hilfreich, die part ofDirektive in unserer Datei secret_file.dart zu verwenden, damit der Editor erkennt, dass sie "Teil" der Bibliothek ist.

// secret_file.dart
part of awesome_library;

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

Beachten Sie, dass bei Verwendung einer solchen Teiledatei die Teile (dh alles, was nicht die Hauptdatei der Bibliothek ist) keine Bibliotheksdeklarationen selbst importieren oder verwenden können. Sie importieren alles, was in die Hauptdatei importiert wird, können jedoch keine zusätzlichen Importe hinzufügen.

Weitere Informationen zur Bibliothek finden Sie unter diesem Link.

Matt B.
quelle
22

Importieren Ihrer selbst erstellten Bibliotheken: Sie importieren den filename.dartund nicht den Namen Ihrer Bibliothek. Wenn der Name Ihrer Bibliothek also lautet: myLibund er in der Datei gespeichert ist, müssen someDartFile.dartSie :

import 'someDartFile.dart';

Wenn Sie unter Windows eine Bibliothek unter: K: \ SomeDir \ someFile.dart haben, müssen Sie Folgendes schreiben:

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

Beispiel:

import 'LibraryFile.dart'; //importing myLib

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

myLib in 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";
}

Hier ein vollständiges Beispiel.

//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;
}
Gero
quelle
Was wäre, wenn Sie keine Bibliothek, sondern nur eine neue Dart-Datei mit Klassen hätten? Würde dies immer noch funktionieren?
Steoates
Wie ich mich in Dart erinnere, ist alles eine Bibliothek. Auch Ihre Bewerbung mit main (). Aber ich erinnere mich, dass ich die gleichen Gedanken hatte wie du :). Warum brauche ich eine Bibliothek, wenn ich nur ein Objekt aus einer anderen Klasse / Datei erstellen möchte? Aber es funktioniert.
Gero
1
Nur zur Bestätigung - es ist nur eine Bibliothek, wenn Sie die Definition "Bibliothek" oben haben. Ein Skript kann eine main () - Funktion haben, ohne auch eine Bibliothek zu sein.
Chris Buckett
11

Ich antworte zwar sehr spät, aber die Antwort kann neuen Entwicklern helfen.

Verwenden Sie immer die Datei pubspec.yaml in Ihrem Dart-Paket (Anwendung / Bibliothek).

Sobald Sie den Befehl pub get ausführen, wird Ihre lokale Bibliothek zur Abhängigkeitsliste in der .packages-Datei hinzugefügt.

Bedenken Sie, ich habe folgende Projektstruktur.

Geben Sie hier die Bildbeschreibung ein

Um auf den Inhalt von greeting.dart in meiner main.dart-Datei zu verweisen, sollte ich die Bibliothek wie folgt hinzufügen

import 'package:my_project_name/greeting.dart'

Nach dem Import können wir den Inhalt der Datei greeting.dart in unserer Datei main.dart verwenden. Hinweis: Wir haben den tatsächlichen Pfad nicht verwendet, da das Verzeichnis 'lib' fehlt.

vashishth
quelle
Wenn Sie ein Objekt der Klasse in dieser Datei instanziieren, generiert IDE automatisch einen Importpfad für Sie. Sie müssen nicht eingeben.
Prachit
0

Stellen Sie zunächst sicher, dass der Name, den Sie erwähnt haben, pubspec.yaml und die Datei, die Sie importieren möchten, genau denselben Namen haben

Beispiel:

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(); 
}

Aber in der müssen main.dartSie nicht angeben, machen Sie import 'package:flutter_wordpress_app einfach wie unten

import 'dirOne/dirTwo/greeting.dart
Aathi
quelle