chalona_api 0.0.7
chalona_api: ^0.0.7 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> {
// haciendo que opcionalmente la clase reciba el nombre con el que se va
// a manejar la instancia
UserList([String? name]) : super(name ?? '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.
Convinar DataMap y DataList
Definimos una clase como esta
class Tarea extends DataMap {
// para tipos predefinidos consultar types.dart
var descripcion = Descrip(name: 'descripcion');
// el nombre en la lista es vital
var encargados = UserList('encargados');
Tarea() {
// notar que la propiedad encargados esta tambien incluida
bind(members: [descripcion, encargados]);
}
}
y la podemos implementar asi
var tarea = Tarea();
tarea.reset({
'descripcion': 'ir a dar un paseo',
'encargados': [
{'id': '001', 'nombre': 'juan'},
{'id': '002', 'nombre': 'marcos'}
]
});
print(tarea.get());
// inicializa el recurso que va a consultar el sistema
var http = Http(url: 'https://servidor_api', key: 'clave_de_encriptacion');
// adjunta el recurso a app
app.addHost(host: http);
// realiza el login
await app.login(user: 'usuario', pass: 'clave');
print(app.session.isLogged);
print(app.session.get());
// restarura la session
await app.sessionRestore();
print(app.session.get());
// cierra la session
await app.sessionRelease();
print(app.session.get());