O que flutter-handling-concurrency faz?
Executa tarefas de longa duração em isolates em segundo plano para manter a IU responsiva. Use ao realizar cálculos pesados ou analisar grandes conjuntos de dados.
Como Usar
Criando e Usando um Isolate
- Defina uma função de longa duração que será executada no isolate.
- Use
Isolate.spawnpara criar um novo isolate e executar a função. - Configure um
ReceivePortpara receber mensagens do isolate. - Encerre o isolate quando não for mais necessário.
Exemplo
import 'dart:isolate';
import 'package:flutter/foundation.dart';
// Função pesada que será executada em um isolate
void heavyComputation(SendPort sendPort) {
// Simulação de processamento intensivo
double resultado = 0;
for (int i = 0; i < 1000000; i++) {
resultado += i * 0.5;
}
sendPort.send(resultado);
}
// Na sua UI
Future<void> performInBackground() async {
final receivePort = ReceivePort();
await Isolate.spawn(heavyComputation, receivePort.sendPort);
final resultado = await receivePort.first;
print('Resultado: $resultado');
// Opcional: encerrar o isolate explicitamente
// receivePort.close();
}
Usando compute (Forma Simplificada)
Se a tarefa for auto-contida e não precisar de comunicação contínua, use compute:
Future<void> performWithCompute() async {
final resultado = await compute(heavyComputation, null);
print('Resultado: $resultado');
}
Boas Práticas
- Use
computesempre que possível para simplificar. - Para comunicação bidirecional ou tarefas contínuas, prefira
Isolate.spawneReceivePort. - Evite passar muitos dados grandes entre isolates; prefira referências ou arquivos.
- Sempre encerre isolates quando não forem mais necessários para liberar recursos.
- Teste o desempenho para garantir que a concorrência realmente melhora a experiência.
Notas
- Isolates não compartilham memória, então toda comunicação é baseada em mensagens.
computeé limitado a funções que recebem um único argumento e retornam um valor.- Para tarefas com múltiplos argumentos ou estados compartilhados, implemente seu próprio isolate com lógica de mensagens.