Apa perbedaan antara show
dan seperti
dalam sebuah pernyataan impor?
Misalnya, apa yang's perbedaan antara
import 'dart:convert' show JSON;
dan
import 'package:google_maps/google_maps.dart' as GoogleMap;
Kapan saya gunakan tampilkan
dan kapan saya harus menggunakan sebagai
?
Jika saya beralih ke tampilkan GoogleMap
semua referensi untuk GoogleMap
(misalnya GoogleMap.LatLng
) benda-benda yang dilaporkan sebagai tidak terdefinisi.
seperti
dan show
adalah dua konsep yang berbeda.
Dengan seperti
anda memberikan diimpor perpustakaan sebuah nama. It's biasanya dilakukan untuk mencegah perpustakaan dari polusi anda namespace jika memiliki banyak fungsi-fungsi global. Jika anda menggunakan sebagai
anda dapat mengakses semua fungsi dan kelas kata perpustakaan dengan mengakses mereka dengan cara yang anda lakukan pada anda contoh: GoogleMap.LatLng
.
Dengan tampilkan
(dan sembunyikan
), anda dapat memilih kelas khusus yang anda inginkan akan terlihat di aplikasi anda. Untuk contoh ini akan menjadi:
import 'package:google_maps/google_maps.dart' show LatLng;
Dengan ini, anda akan dapat mengakses LatLng
tapi tidak ada yang lain dari perpustakaan itu. Kebalikan dari hal ini adalah:
import 'package:google_maps/google_maps.dart' hide LatLng;
Dengan ini, anda akan dapat mengakses segala sesuatu dari perpustakaan itu kecuali untuk LatLng
.
Jika anda ingin menggunakan beberapa kelas dengan nama yang sama anda'd perlu menggunakan seperti
. Anda juga dapat menggabungkan kedua pendekatan:
import 'package:google_maps/google_maps.dart' as GoogleMap show LatLng;
show
kasus:
impor 'dart:async' menunjukkan Aliran;
Dengan cara ini anda hanya impor Aliran
kelas dart:async
, jadi jika anda mencoba untuk menggunakan kelas lain dari dart:async
lain dari Aliran
itu akan melempar kesalahan.
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
}
sebagai
kasus:
impor 'dart:async' sebagai async;
Dengan cara ini anda mengimpor semua kelas dari dart:async
dan pustaka dengan async
kata kunci.
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'
}
sebagai
biasanya digunakan ketika ada konflik kelas di impor perpustakaan, misalnya jika anda memiliki sebuah perpustakaan 'my_library.dart' yang berisi sebuah class bernama Aliran
dan anda juga ingin menggunakan Aliran
kelas dart:async
dan kemudian:
import 'dart:async';
import 'my_library.dart';
void main() {
Stream stream = new Stream.fromIterable([1, 2]);
}
Dengan cara ini, kita don't tahu apakah Aliran ini adalah kelas dari async library atau perpustakaan anda sendiri. Kita harus menggunakan sebagai
:
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
}
Untuk show
, saya kira ini digunakan ketika kita tahu kita hanya perlu sebuah kelas tertentu. Juga dapat digunakan ketika ada konflik kelas di impor perpustakaan. Let's mengatakan di perpustakaan anda sendiri anda memiliki class bernama CustomStream
dan Aliran
dan anda juga ingin menggunakan dart:async
, tetapi dalam kasus ini anda hanya perlu CustomStream
dari perpustakaan anda sendiri.
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
}
Beberapa solusi:
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
}