Que solo tienen significado en lugares particulares del lenguaje.
show
Para importar parte de un paquete.
// Importa sólo color
import 'package:lib/lib.dart' show color;
hide
Para exceptuar cierta parte del paquete al importarlo.
// Importa todo excepto color
import 'package:lib/lib.dart' hide color;
async
Junto a await, se usa para la programación asíncrona.
// cuando hay un Future nos pide agregar async obligatoriamente.
Future<void> checkVersion() async {
var version = await lookUpVersion();
// otras sentencias
}
🖥️>
Hay también otro uso async* para funciones generadoras asíncronas.
Una función generadora es una función especial que puede generar una secuencia de valores a medida que se solicitan (se itera sobre ellos), en lugar de producir todos los valores de una vez.
Stream<int> contarAsync(int hasta) async* {
for (int i = 1; i <= hasta; i++) {
await Future.delayed(Duration(seconds: 1));
yield i;
}
}
// Ejemplo de uso
await for (var n in contarAsync(3)) {
print(n);
}
sync
Para implementar una función se generadora síncrona.
Una función generadora síncrona produce valores de manera perezosa (lazy), uno por uno, solo cuando se necesitan.
Iterable<int> naturalsNumber(int limit) sync* {
for (int i = 0; i < limit; i++) {
yield i;
}
}
🧠 Diferencia clave
Característica
sync*
async*
Retorna
Iterable<T>
Stream<T>
Iteración
for (var x in ...)
await for (var x in ...)
Esperas/Delays
❌ No
✅ Sí (await funciona)
Uso típico
Datos inmediatos
Cuando los datos llegan con el tiempo (por ejemplo, de la red, archivos, temporizadores)
on
Para especificar un tipo de excepción al catch.
try {
// sentencias que pueden generar excepción
} on FormatException catch (e) {
// manejo solo de la excepción FormatException
} on NumberException catch (e) {
// manejo solo de la excepción NumberException
} catch (e) {
// Manejo genérico para otras excepciones
}
Palabras clave
abstract
Para declarar las clases abstractas, que son clases que no requiera una implementación completa y concreta de toda su interfaz y por lo general tienen métodos abstractos.
abstract class Shape {
// función abstracta sin implementación
double area();
// función concreto con implementación
void draw() {
print('Dibujando la figura');
}
}
as
Operador para asignar un objeto a un tipo determinado.