📚 Pré-requisitos Teóricos: este projeto aplica conceitos ensinados em Especialização em Flutter. Recomendado revisar antes de começar.
v1.0 — Flutter 3, Dart, Gerenciamento de Estado, Material 3 e Multiplataforma
Trilha de Especialização Pedagógica — Projeto 1 de 4
- ➡️ v1 (este): App Financeiro · Flutter 3 · Dart · Material 3 · Gerenciamento de Estado
- v2: Persistência Local com Hive / SQLite & Gráficos Interativos
- v3: Autenticação Firebase & Cloud Firestore em Tempo Real
- v4: Clean Architecture Mobile com BLoC Pattern & Testes Automatizados
🎓 Nível Profissional Simulado: Desenvolvedor Flutter Júnior. Flutter é a tecnologia multiplataforma mais popular do planeta, permitindo criar aplicativos para Android, iOS, Web e Desktop com uma única base de código em Dart. Dominar a árvore de Widgets (
StatelessvsStateful) e gerenciamento de estado é a chave da produtividade mobile.
—`
Construir um Aplicativo Mobile de Controle Financeiro Pessoal em Flutter 3 + Dart, implementando listagem de transações, cálculo automático de saldo em tempo real, formulário de lançamento com validação e interface responsiva no padrão Material Design 3.
—`
“Precisamos de um app mobile para Android e iPhone onde o usuário possa cadastrar receitas e despesas. O app deve ter um card de destaque exibindo o Saldo Atual (receitas - despesas) com cor verde para positivo e vermelho para negativo, uma lista de transações com ícones por categoria e um botão flutuante (FAB) para adicionar novos lançamentos.”
| ID | Tipo | Descrição | Origem no Briefing |
|---|---|---|---|
| RF01 | Funcional | Exibir card de saldo total com coloração dinâmica condicional. | “card de destaque exibindo o Saldo” |
| RF02 | Funcional | Listar histórico de lançamentos com ícone e formatação monetária ($R$). | “lista de transações com ícones” |
| RF03 | Funcional | Modal/Formulário para adicionar novas transações. | “botão flutuante para adicionar” |
| RNF01 | Não-Funcional | 100% de paridade visual nativa em iOS e Android com Material 3. | Multiplataforma |
| RNF02 | Não-Funcional | Renderização fluida a 60/120 FPS. | Performance Flutter |
—`
| ID | User Story | Prioridade |
|---|---|---|
| US01 | Como usuário, quero abrir o app no meu celular e ver meu saldo atualizado no topo. | Alta |
| US02 | Como cliente, quero lançar uma despesa e ver o saldo recalcular instantaneamente. | Alta |
—`
# Branch da funcionalidade
git checkout -b feature/US01-flutter-finance-app
# Executar no emulador
flutter run
—`
main.dart)import 'package:flutter/material.dart';
void main() => runApp(const MeuAppFinanceiro());
class MeuAppFinanceiro extends StatelessWidget {
const MeuAppFinanceiro({super.key});
@override
Widget build(BuildContext context) {
return MaterialApp(
debugShowCheckedModeBanner: false,
theme: ThemeData(useMaterial3: true, colorSchemeSeed: Colors.green),
home: const TelaPrincipal(),
);
}
}
class TelaPrincipal extends StatefulWidget {
const TelaPrincipal({super.key});
@override
State<TelaPrincipal> createState() => _TelaPrincipalState();
}
class _TelaPrincipalState extends State<TelaPrincipal> {
double saldo = 1250.00;
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: const Text('Controle Financeiro')),
body: Center(
child: Text('Saldo Atual: R$ ${saldo.toStringAsFixed(2)}',
style: const TextStyle(fontSize: 24, fontWeight: FontWeight.bold)),
),
floatingActionButton: FloatingActionButton(
onPressed: () => setState(() => saldo += 100.0),
child: const Icon(Icons.add),
),
);
}
}
—`
No seu editor/IDE, abra a pasta deste projeto (File > Open Folder) ou navegue via terminal:
cd mobile_flutter_01_financeiro
flutter pub get
flutter run
flutter test
[!TIP] Dica para execução a partir da raiz do repositório: Se você abriu o repositório completo no VS Code, basta navegar até a pasta antes de executar: cd proj_aplicacoes_full_stack/projetos/mobile_flutter_01_financeiro`
—`
// Teste de Widget do Flutter
testWidgets('Incrementa o saldo ao clicar no botao', (WidgetTester tester) async {
await tester.pumpWidget(const MeuAppFinanceiro());
await tester.tap(find.byType(FloatingActionButton));
await tester.pump();
expect(find.text('Saldo Atual: R$ 1350.00'), findsOneWidget);
});
—`
- App rodando perfeitamente em emuladores Android e iOS.
- Árvore de widgets e reatividade validadas com testes.
| ⬅️ Ver Todos os Projetos no Super-Hub | 🏠 Página Inicial do Portal |