chalona_api 0.0.4
chalona_api: ^0.0.4 copied to clipboard
Librerias comunes a proyecto chalona
Librerias comunes a proyecto chalona
Features #
probando mientras tanto
Getting started #
dart pub get chalona_api
Usage #
Objeto util: #
contiene un conjunto de varias funciones utiles
String util.uuid();
devuelve un codigo unico aleatorio
util.coalesce
devuelve el primer valor no nulo de una lista, si la lista no lo tiene devuelve nulo
List<Map<String, dynamic>> util.toList(List? x)
convierte List
Map<String, dynamic> util.fixSearchArgs(Map? x)
convierte List
bool util.inList
devuelve verdadero si encuentra x en la lista
static String util.jsonToString(args)
convierte json to string tomando el cuenta los dato tipo date
util.now()
devuele la fecha actual
saluda()
saluda segun la hora
String util.textRender(String text, Map<String, dynamic> data) {
renderiza un texto
class DataMap: Para manejar Map. #
Definimos una clase como esta
class UserMap extends DataMap {
// declarando todos los datos que va a tener el objeto
StringData id = StringData('id');
StringData nombre = StringData('nombre');
StringData direccion = StringData('direccion');
StringData telefono = StringData('telefono');
NumberData limitecr = NumberData('limitecr');
UserMap() {
// inicializa todos los campos, importante que todos los campos especificados esten en la lista
bind(members: [id, nombre, telefono, direccion, limitecr]);
}
}
o tambien puede definirla de esta forma
class UserMap extends DataMap {
// declarando todos los datos que va a tener el objeto
var id = Id();
var nombre = Nombre();
var direccion = Direccion();
var telefono = Telefono();
var limitecr = NumberData('limitecr');
UserMap() {
// inicializa todos los campos, importante que todos los campos especificados esten en la lista
bind(members: [id, nombre, telefono, direccion, limitecr]);
}
}
revise el archivo types.dart para ver varios tipos de datos predefinidos
#
y estas son algunas maneras de implementarla
// instanciando la clase
var user = UserMap();
print('valor inicial -> ${user.nombre.value}');
// puede asignar valor a las propiedades
user.nombre.value = 'usuario Test';
print('valor modificado -> ${user.nombre.value}');
// puede deshacer el cambio realizado
user.nombre.undo();
print('desecho los cambios -> ${user.nombre.value}');
// puede asignar un valor como original del dato
user.nombre.reset('sin nombre');
print('valor reseteado -> ${user.nombre.value}');
user.nombre.value = 'usuario prueba';
print('valor modificado -> ${user.nombre.value}');
user.nombre.undo();
print('desecho los cambios -> ${user.nombre.value}');
// se puede hacer aplicar un cambio mediante un json con los valores
user.set({'id': '001', 'nombre': 'nombre asignado via json via contenedor'});
print(user.get());
// se puede deshacer los cambios de manera global
user.undo();
print(user.get());
// se puede definir el valor original mediante en json con valores
user.reset({'id': '001', 'nombre': 'nombre original definido via json via contenedor'});
print(user.get());
user.set({'id': '001', 'nombre': 'nombre asignado via json via contenedor'});
print(user.get());
user.undo();
print(user.get());
Evento Changed
// instanciando la clase
var user = UserMap();
user.on('changed', (x) {
var r = {};
user.changes(r);
print('se esta modificando cualquier propiedad del objeto ' + jsonEncode(r));
});
await user.direccion.set('santo domiiiiingo... hay que lindo!!!');
// hay disparadores (ASINCRONOS) para cuando se efectuan cambios
user.nombre.on('changed', (x) async {
await user.nombre.set(user.nombre.value.toUpperCase());
});
// si desea que el efecto del trigger sea SINCRONO en su codigo haga esto
await user.nombre.set('probando evento changed(sincrono) debe imprimir en mayuscula');
print(user.nombre.value);
user.nombre.set('probando evento changed(asincrono) debe imprimir en minuscula');
print(user.nombre.value);
IMPORTANTE
Siempre use await para usar el metodo set para modificar el contenido de un atributo o si desea modificar todo el contenido con un Map
class DataList: Para manejar List. #
Definimos una clase como esta
class UserList extends DataList<UserMap> {
UserList() : super('users');
@override
UserMap create() => UserMap();
}
luego lo podemos implementar asi
var users = UserList();
// configurando evento changed
users.on('changed', (x) {
print('evento changed funcionando!!, esto viene en x: ${x}');
});
// asignando valores originales
users.reset([
{'id': '000', 'nombre': 'nombre reseteado'}
]);
// agregando list
await users.addList([
{'id': '001', 'nombre': 'agregado de un List 1'},
{'id': '002', 'nombre': 'agregado de un List 2'}
]);
// agregando map
await users.addMap({'id': '003', 'nombre': 'agregado de un Map'});
// actualizando via indice
await users[2].nombre.set(users[2].nombre.value + ', modificado via indice');
// actualizando via first
await users.first.nombre.set(users.first.nombre.value + ', modificado first');
// imprimiendo contenido
users.forEach((e) {
print(e.get());
});
// imprimiendo cambios
var changes = {};
if (users.changes(changes)) {
print('LO MODIFICADO =====================');
changes['users'].forEach((e) {
print(e);
});
}
IMPORTANTE
Siempre use await para usar los metodos set, addMap, addList.