O que aconteceu
Se você usa Pub Workspaces (monorepo com workspace: no root e resolution: workspace nos packages), pode ter notado um comportamento bem chato ao rodar testes com cobertura: o comando até executa, mas a cobertura sai zerada/vazia. Em workspaces, o pub faz uma resolução única (um pubspec.lock e um .dart_tool/package_config.json compartilhados na raiz), o que é ótimo para consistência… mas aumenta a chance de conflito quando alguma ferramenta/dep não está 100% alinhada com esse modo de resolução. ([Dart][1])
Sintoma típico
No package:test, o problema aparece como cobertura vazia, mesmo com testes passando — por exemplo, um retorno no formato:
{"type":"CodeCoverage","coverage":[]}
Isso foi reportado como bug do test ao usar resolution: workspace, com repro bem direto (monorepo + dart test --coverage). ([GitHub][2])
Por que isso bateu forte no Flutter 3.41
O ponto-chave é que o Flutter SDK tem pinned packages: alguns pacotes são fixados pelo SDK em versões específicas (incluindo dependências do flutter_test). Se seu app (ou suas deps) dependem desses pacotes, seu grafo de dependência precisa aceitar exatamente as versões pinadas — senão você fica “preso” numa faixa de versões. ([GitHub][3])
No caso desta treta, o Flutter 3.41 ficou travado em uma combinação que fazia o workspace cair numa versão do test que ainda tinha o bug de cobertura. A issue do Flutter descreve exatamente isso: o Flutter 3.41 “fica” no test 1.28 por causa do pin do test_api dentro do flutter_test, e o bug foi corrigido no test 1.29.0 — mas você não conseguia chegar nele por causa do pin. ([GitHub][4])
Como corrigir (o caminho recomendado)
A correção prática é: atualize para o hotfix que ajusta esse encaixe de versões. Na prática, a recomendação que circulou (e que resolve o cenário de workspaces + coverage) é estar no Flutter 3.41.1 (ou superior) e rodar:
flutter upgrade
Esse hotfix atualiza as dependências do flutter_test para voltar a permitir uma combinação compatível com o fluxo de cobertura em workspaces (incluindo o ajuste de compatibilidade do test_api). ([Instagram][5])
Se você não pode atualizar agora (workaround)
Se você está bloqueado (CI/produção/branch congelada), dá para resolver um package fora do workspace temporariamente, só para rodar validações/testes/cobertura naquele pacote.
A própria doc de workspaces sugere criar um pubspec_overrides.yaml no package e resetar o resolution — assim ele faz uma resolução independente ao rodar dart pub get dentro daquele diretório. ([Dart][1])
Exemplo (dentro de packages/seu_pacote/):
-
crie
pubspec_overrides.yamlcom:-
resolution:(em branco)
-
rode
dart pub getdentro do packagerode seus testes/cobertura ali
Próximo passo: evoluir no Flutter (e em IA aplicada)
Se você curte esse tipo de conteúdo “mão na massa” (bug real, solução real, e impacto em CI/produção), aqui vão 3 caminhos pra acelerar seu nível:
✅ 1) Academia do Flutter
Formação completa do zero ao avançado, com projetos reais, arquitetura, testes, performance e publicação.
Acesse: https://novo.academiadoflutter.com.br/
✅ 2) Academia das IAs
Pra aprender a usar IA no desenvolvimento do jeito certo: engenharia de contexto, workflows e produtividade real pra entregar features inteiras.
Acesse: https://academiadasias.com.br/
✅ 3) Workshop Flutter Experience
Evento 100% prático pra construir um app completo comigo, do começo ao fim, com foco em entrega.
Acesse: https://go.hotmart.com/N101339135N
--
https://github.com/flutter/flutter/issues/182314
https://raw.githubusercontent.com/flutter/flutter/3.41.1/CHANGELOG.md
https://github.com/dart-lang/test/issues/2570
https://dart.dev/tools/pub/workspaces
Top comments (0)