dart - online - ¿Cuál es la diferencia entre "mostrar" y "como" en una declaración de importación?
descargar dart sdk (2)
¿Cuál es la diferencia entre show
y as
en una declaración de importación?
Por ejemplo, ¿cuál es la diferencia entre
import ''dart:convert'' show JSON;
y
import ''package:google_maps/google_maps.dart'' as GoogleMap;
¿Cuándo uso show
y cuándo debo usar as
?
Si cambio para show GoogleMap
todas las referencias a objetos de GoogleMap
(por ejemplo, GoogleMap.LatLng
) se informarán como no definidas.
vitrina:
import ''dart:async'' show Stream;
De esta manera, solo importa la clase Stream
desde dart:async
, por lo que si intenta utilizar otra clase desde dart:async
no sea Stream
se generará un error.
void main() {
List data = [1, 2, 3];
Stream stream = new Stream.fromIterable(data); // doable
StreamController controller = new StreamController(); // not doable
// because you only show Stream
}
as
caso
import ''dart:async'' as async;
De esta manera usted importa todas las clases de dart:async
y las coloca con una palabra clave async
.
void main() {
async.StreamController controller = new async.StreamController(); // doable
List data = [1, 2, 3];
Stream stream = new Stream.fromIterable(data); // not doable
// because you namespaced it with ''async''
}
as
se usa generalmente cuando hay clases en conflicto en su biblioteca importada, por ejemplo, si tiene una biblioteca ''my_library.dart'' que contiene una clase llamada Stream
y también quiere usar la clase Stream
desde dart:async
y luego:
import ''dart:async'';
import ''my_library.dart'';
void main() {
Stream stream = new Stream.fromIterable([1, 2]);
}
De esta manera, no sabemos si esta clase de Stream es de una biblioteca asíncrona o de su propia biblioteca. Tenemos que utilizar as
:
import ''dart:async'';
import ''my_library.dart'' as myLib;
void main() {
Stream stream = new Stream.fromIterable([1, 2]); // from async
myLib.Stream myCustomStream = new myLib.Stream(); // from your library
}
Para el show
, supongo que esto se usa cuando sabemos que solo necesitamos una clase específica. También se puede usar cuando hay clases en conflicto en su biblioteca importada. Digamos que en su propia biblioteca tiene una clase llamada CustomStream
y Stream
y también desea usar dart:async
, pero en este caso solo necesita CustomStream
de su propia biblioteca.
import ''dart:async'';
import ''my_library.dart'';
void main() {
Stream stream = new Stream.fromIterable([1, 2]); // not doable
// we don''t know whether Stream
// is from async lib ir your own
CustomStream customStream = new CustomStream();// doable
}
Algunas soluciones:
import ''dart:async'';
import ''my_library.dart'' show CustomStream;
void main() {
Stream stream = new Stream.fromIterable([1, 2]); // doable, since we only import Stream
// async lib
CustomStream customStream = new CustomStream();// doable
}
as
show
y se show
dos conceptos diferentes.
Con as
le está dando un nombre a la biblioteca importada. Generalmente se hace para evitar que una biblioteca contamine su espacio de nombres si tiene muchas funciones globales. Si usa as
puede acceder a todas las funciones y clases de dicha biblioteca, acceda a ellas como lo hizo en su ejemplo: GoogleMap.LatLng
.
Con show
(y hide
) puede elegir las clases específicas que desea que sean visibles en su aplicación. Para tu ejemplo sería:
import ''package:google_maps/google_maps.dart'' show LatLng;
Con esto usted podría acceder a LatLng
pero nada más desde esa biblioteca. Lo contrario de esto es:
import ''package:google_maps/google_maps.dart'' hide LatLng;
Con esto podrás acceder a todo desde esa biblioteca, excepto a LatLng
.
Si quieres usar varias clases con el mismo nombre, necesitarías usar as
. También puedes combinar ambos enfoques:
import ''package:google_maps/google_maps.dart'' as GoogleMap show LatLng;