Falar com a CG MixartContato
Falar com a CG Mixart
08/8

Educação em programação

Dart Turismo: a placa mostra a palavra, cada letra certa acelera e a ficha de código pega vale moedas

PAC·DART

Treinador de digitação que ensina Dart e Flutter com código de verdade, e um campeonato de corrida em 3D em que as palavras do Dart são o volante.

Cliente
Produto próprio da CG Mixart
Categoria
EdTech / jogo educativo
Período
jul–set 2026
Estado
Em produção
pac-dart.web.app

O problema

Quem aprende Dart e Flutter lê muito e digita pouco: o tutorial mostra o código pronto, a mão não decora a sintaxe e o primeiro app de verdade trava na primeira chave que falta. Treinador de digitação existe, mas com texto genérico; curso de Flutter existe, mas sem prática de teclado. Ninguém junta as duas coisas, e o jogo educativo que se propõe a isso costuma parar num quiz.

O que foi construído

Um app Flutter para web em que cada exercício é um trecho real de Dart: um Pac-Man marca o cursor, a indentação é comida sozinha e, ao terminar o trecho, ele compila e mostra a saída no console. Nos projetos Flutter a tela do app se monta ao vivo enquanto o código é digitado. São 32 trilhas, 336 lições e 2.354 exercícios, com teoria por lição, quiz e um tutor com IA, o Prof. Dash, que enxerga o trecho em estudo e responde no contexto. Em volta do curso, um Arcade com seis jogos e o Dart Turismo: um campeonato de 10 pistas em 3D real, com Three.js embutido num platform view, em que a palavra digitada escolhe a faixa e cada tecla certa é gás.

2.354
em 336 lições e 32 trilhas
Exercícios de código real
30
a tela monta enquanto se digita
Apps Flutter com prévia ao vivo
10
de 4 a 12 km, em 6 mundos
Pistas em 3D no Dart Turismo
191
motor, prévia, tutor e telas
Testes automatizados

Decisões de engenharia

01

A palavra é o volante: Dart Turismo em 3D real

Campeonato de 10 pistas, de 4 a 12 km, em seis mundos: campina, deserto, cidade à noite, neve, vulcão e espaço. Dois modos de dirigir: digitação, em que a palavra de cada portal escolhe a faixa e toda tecla certa é gás, e setas, com controle clássico e botões na tela no celular. Tráfego que arranca quando o carro chega, batidas com física, fichas de código que valem moedas, quatro câmeras, carro-fantasma da melhor volta, medalhas por tempo derivadas de uma velocidade-alvo por pista e 12 troféus.

lib/features/arcade/domain/turismo.dart:88-97 (PistaGt 1 a 10, distancia 4000 a 12000, tema 1 a 6, velAlvo 60 a 150); :181 (enum ModoControle { digitacao, setas }); lib/features/arcade/domain/progresso_turismo.dart:414-420 (camerasGt: perseguição, capô, cinema, helicóptero), :96 (trofeusGt, 12 itens); web/turismo3d/turismo3d.js:29-33 (5 carros glTF), :1175 (fantasma da melhor volta)

02

Motor em Dart, cena em JavaScript, testado sem tela

A física, a pista gerada por semente, os portais e a pontuação vivem num motor Dart puro, coberto por teste sem abrir tela nenhuma. A cena Three.js recebe só o estado a cada frame, então o jogo continua igual fora da web. Antes da primeira corrida um benchmark de cerca de 0,3 s mede a GPU e escolhe um de três níveis de qualidade, e o tutorial abre sozinho na primeira largada.

lib/features/arcade/domain/turismo.dart:333 (TurismoEngine), :465 (_gerarPista); test/turismo_test.dart; web/turismo3d/turismo3d.js:65-96 (benchmark da GPU, níveis alta, leve e mínima)

03

Prévia ao vivo: o app se monta enquanto o código é digitado

Nos 30 projetos Flutter do curso, a tela do app aparece renderizada conforme o trecho vai sendo digitado, sem compilar nada: um motor de prévia com 32 regras interpreta o código e monta o widget. Há teste de que a prévia nunca fica em branco e de cobertura das regras.

assets/master.json (lista de 30 itens com cod, out e flutter); lib/features/preview/demos/demos.dart:28 (_regras, 32 _Regra); test/previa_viva_test.dart, test/previa_sem_branco_test.dart, test/preview_cobertura_test.dart, test/preview_engine_test.dart

04

Tutor que enxerga o trecho: Prof. Dash com Gemini

O tutor recebe a lição e o trecho exato em que o aluno está e responde no contexto, com atalhos como 'o que esse trecho faz' e 'explica como se eu tivesse 10 anos'. O modelo só é criado na primeira pergunta e a chave da API nunca fica no código: é lida do Firestore em runtime. No Turismo, a mesma IA vira engenheira de pista, lê a telemetria da corrida e comenta no rádio ao final.

lib/features/tutor/; lib/main.dart:112 (modelo criado na primeira pergunta); lib/core/voz/voz_natural.dart:10 (chave buscada do Firestore); lib/features/arcade/data/engenheiro_gt.dart:191

05

Prova visual sem login

Para fotografar e testar o curso sem conta, um segundo ponto de entrada sobe o app com usuário, progresso e tutor de mentira; outro sobe só o Arcade sem Firebase. O Playwright liga a acessibilidade do canvas do Flutter e passa a clicar por nome de botão. Foi assim que saíram os prints desta página e as provas de que o voo da bola e a pausa funcionam.

lib/main_portfolio_probe.dart:2; lib/main_arcade_probe.dart; ESTADO-DO-PROJETO.md:209-217 (receita: flutter build web -t lib/main_arcade_probe.dart, flt-semantics-placeholder)

Stack

App (web)
Flutter / Dart SDK ^3.11, flutter_bloc ^9.1, equatable, google_fonts
Cena 3D do Dart Turismo
Three.js r0.186 (WebGL) num HtmlElementView, carros glTF com Draco, céus HDRI; a lógica do jogo fica em Dart puro e manda o estado ao JS a cada frame
Conteúdo
curriculo.json com 32 trilhas e 336 lições; master.json com os 30 apps de prévia ao vivo; motor de prévia com 32 regras
IA
Gemini API: tutor Prof. Dash e engenheira de pista; chave lida do Firestore em runtime, nunca no código
Dados e auth
Firebase Auth ^5.3, Cloud Firestore ^5.6 (ranking entre amigos), shared_preferences (progresso local)
Voz e som
flutter_tts ^4.2 (narração em pt-BR), Web Audio (motor gravado, pneu, vento, uma música por pista)
Hospedagem e prova
Firebase Hosting (pac-dart.web.app); flutter_test com 191 testes; Playwright para a prova visual sem login
Flutter WebDartflutter_blocThree.jsWebGLGeminiFirebaseEdTechJogo educativo

Telas

Noturno da Cidade pela câmera de helicóptero: pórtico com as três faixas, tráfego e fachadas fotográficas
Noturno da Cidade pela câmera de helicóptero: pórtico com as três faixas, tráfego e fachadas fotográficas
Grande Final Sideral no modo setas, com o carro-fantasma da melhor volta
Grande Final Sideral no modo setas, com o carro-fantasma da melhor volta
Fim da corrida: medalha, estatísticas, troféus e o rádio da engenheira de pista com IA
Fim da corrida: medalha, estatísticas, troféus e o rádio da engenheira de pista com IA
Campeonato: modo de controle, garagem, troféus e as 10 pistas
Campeonato: modo de controle, garagem, troféus e as 10 pistas
No celular, faixa, freio e gás viram botões na tela
No celular, faixa, freio e gás viram botões na tela
O curso: um exercício de Dart digitado com o Pac-Man no cursor e o Prof. Dash ao lado
O curso: um exercício de Dart digitado com o Pac-Man no cursor e o Prof. Dash ao lado
Projeto Flutter com a prévia ao vivo montando o app enquanto o código é digitado
Projeto Flutter com a prévia ao vivo montando o app enquanto o código é digitado
Mapa da jornada: 32 trilhas, 336 lições e o progresso
Mapa da jornada: 32 trilhas, 336 lições e o progresso
O Arcade: seis jogos e o modo Lógica Animada
O Arcade: seis jogos e o modo Lógica Animada

O papel da CG Mixart

Único desenvolvedor: conceito, currículo, motor de digitação e de prévia, o campeonato em Dart e a cena Three.js, as integrações com Gemini e Firebase, os testes e o deploy.

Ressalvas e notas técnicas, verificadas no códigoabrir

Produto próprio, com código público em github.com/carlosdesenvolvedor/pac_dart (30 commits, de julho a setembro de 2026). Os prints desta página saíram de um ponto de entrada de prova (lib/main_portfolio_probe.dart) com usuário e tutor de mentira, para fotografar o curso sem login; a receita está em ESTADO-DO-PROJETO.md. Testes: 191 no flutter test; um teste de tela do Dart Turismo é intermitente (falhou em uma de duas rodadas no mesmo dia). Os prints e a interface do app usam os tokens do design system da mixart (lib/core/theme/mixart.dart), por isso a paleta deste caso é a mesma do caso mixart. Assets do Dart Turismo com licença aberta: carros 3D por Lexyc16 (Sketchfab, CC BY 4.0); céus HDRI, texturas, rochas e arbustos do Poly Haven (CC0); fachadas dos prédios do ambientCG (CC0); músicas de Kevin MacLeod, incompetech.com (CC BY 4.0); som de motor e pneu do OpenGameArt (CC BY 3.0); motor 3D three.js (MIT).