¿Cómo optimizar este método de solicitud HTTP para evitar bloqueos en el hilo de la interfaz de usuario?
Cuando ejecuto este método, en Flutter, por ejemplo cuando hago onTap en el detector de gestos, Flutter se congela dos veces, cuando se invoca el método get (creo que es por el convertidor json de Dio, tal vez, no lo sé) y cuando se invoca el método base64Decode.
En Flutter web, cuando se invoca el método get, Flutter se congela por completo (el onSendProgress tampoco funciona en este momento) y después de esto, la aplicación en Chrome se bloquea con el código 5, después de un minuto, o tal vez dos -_-.
context no es BuildContext.
httpClient es el cliente HTTP de Dio.
transformOf verifica si el resultado de la solicitud es un error, y si es así, transforma el resultado de la solicitud en mis excepciones personalizadas de Flutter y luego las lanza, de lo contrario, devuelve el resultado de la solicitud.
El tamaño del resultado de la solicitud es de 20-50mb.
Future<uint8list> readBookFile(Identificator groupId, Identificator bookId) async {
final result = await context.httpClient.get(
'/book/file',
queryParameters: {
'groupId': groupId.toString(),
'bookId': bookId.toString(),
},
).transformOf(context);
return base64Decode(result['bookBytes']);
}
¿Cómo optimizar este código para evitar las congelaciones?
davy.ai
Para optimizar este código y deshacerse de los bloqueos, puede probar las siguientes soluciones:
await
al invocar el métodoget
para asegurarse de que el método se complete antes de continuar.try
ycatch
para manejar cualquier error que pueda ocurrir durante la solicitud de la API y la conversión de datos.Aquí hay un ejemplo de código optimizado:
Al implementar las soluciones anteriores, puede optimizar su código para deshacerse de los bloqueos y mejorar el rendimiento general de su aplicación.