¿Cómo hacer referencia a otro archivo en Dart?

80

Sé que puedes usar library, importe incluso #import, pero ¿cuál es la correcta?

Tengo dos archivos MainClass.darty Library.Dartquiero agregar una referencia Library.darten MainClass.dart. ¿Cómo puedo hacer eso?

Steoates
fuente

Respuestas:

122

En primer lugar, permítanme comenzar diciendo que por favor no utilicen el símbolo de almohadilla antes de la importación o biblioteca o cualquier otra cosa. Esta es una sintaxis antigua que está en desuso. Entonces ya no queremos usar #import('...')La sintaxis correcta es:

import 'some_file.dart';

Dicho esto, hay dos cosas diferentes que podemos hacer para acceder a diferentes archivos fuente de dart dentro de nuestro archivo actual. El primero es importel archivo. Usamos esto como en su caso cuando desea traer una biblioteca diferente al archivo actual (o más exactamente a la biblioteca actual).

Por lo general, si sus archivos están en el mismo directorio, o en un subdirectorio del actual, los importaríamos así:

import 'lib/library.dart';

Sin embargo, si está usando el diseño del paquete pub, también puede usar algunas referencias de atajos especiales para importar archivos (particularmente de otros paquetes que haya importado). Recomiendo encarecidamente leer los documentos en el sitio del pub , ya que la mayoría de las aplicaciones y bibliotecas están diseñadas con esto en mente. También tiene sugerencias sobre las mejores convenciones de nomenclatura, como los nombres de archivo en minúsculas y el uso de subrayado para espacios y diseños de directorio.

La otra cosa importante que debe saber acerca de traer un archivo dart a otro archivo es que podemos usar las directivas party part of. Esto solía llamarse, #sourcepero se cambió (con la eliminación del signo de almohadilla) para reducir la confusión. La partdirectiva se usa cuando queremos escribir una sola biblioteca que abarque varios archivos. Digamos, por ejemplo, que tiene una biblioteca impresionante , que está empezando a volverse un poco grande para un solo archivo. Crearemos el archivo principal de la biblioteca (no confundir con el método principal). Este archivo normalmente tendrá el mismo nombre que la propia biblioteca.

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

La directiva part básicamente toma todo de nuestro src / secret_file.dart y lo inserta en esa parte del archivo. Esto nos permite dividir nuestra enorme Biblioteca Awesome en varios archivos más pequeños que son más fáciles de mantener. Si bien no se requiere específicamente, es útil usar la part ofdirectiva en nuestro secret_file.dart para ayudar al editor a saber que es "parte" de la biblioteca.

// secret_file.dart
part of awesome_library;

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

Tenga en cuenta que cuando se usa un archivo de pieza como este, la pieza (es) (es decir, todo lo que no es el archivo principal de la biblioteca) no puede importar ni usar declaraciones de biblioteca por sí mismas. Importan lo que se importa al archivo principal, pero no pueden agregar importaciones adicionales.

Para obtener más información sobre la biblioteca, consulte este enlace.

Matt B
fuente
22

Importación de sus propias bibliotecas creadas: estará importando filename.dartel nombre de su biblioteca y no el. Entonces, si el nombre de su biblioteca es: myLiby está guardado en el archivo: someDartFile.darttendrá que

import 'someDartFile.dart';

Si tiene en Windows una biblioteca en: K: \ SomeDir \ someFile.dart, deberá escribir:

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

ejemplo:

import 'LibraryFile.dart'; //importing myLib

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

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

Aquí un ejemplo completo.

//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
fuente
¿Qué pasa si no tiene una biblioteca sino solo un nuevo archivo Dart con clases, esto funcionaría todavía?
Steoates
Como recuerdo, en dardo es todo una biblioteca. Incluso su aplicación con main (). Pero recuerdo haber tenido los mismos pensamientos que tú :). ¿Por qué necesito una biblioteca si solo quiero crear un objeto a partir de otra clase / archivo? Pero funciona.
Gero
1
Solo para confirmar, es solo una biblioteca si tiene la definición de "biblioteca" en la parte superior. Un script puede tener una función main () sin ser también una biblioteca.
Chris Buckett
12

Aunque estoy respondiendo muy tarde, pero la respuesta puede ayudar a un nuevo desarrollador.

Utilice siempre el archivo pubspec.yaml en su paquete de dart (aplicación / biblioteca).

una vez que ejecute el comando pub get, agregará su biblioteca local en la lista de dependencias en el archivo .packages.

Considere que tengo la siguiente estructura de proyecto.

ingrese la descripción de la imagen aquí

Para consultar el contenido de greeting.dart en mi archivo main.dart, debo agregar la biblioteca como se muestra a continuación

import 'package:my_project_name/greeting.dart'

Una vez importado, podemos usar el contenido del archivo greeting.dart en nuestro archivo main.dart. Nota: no hemos utilizado la ruta real, ya que puede ver que falta el directorio 'lib'.

vashishth
fuente
cuando crea una instancia de cualquier objeto de clase en ese archivo, IDE genera automáticamente la ruta de importación para usted. No es necesario escribir.
prachit
0

Primero asegúrese de que ese sea el nombre que ha mencionado pubspec.yaml y el archivo que desea importar comparte exactamente el mismo nombre

ejemplo:

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

Pero en el main.dartno necesita especificar, import 'package:flutter_wordpress_app simplemente haga lo siguiente

import 'dirOne/dirTwo/greeting.dart
Aathi
fuente