Loading...
1

2  
{

3  
"name" :"Josué Augusto",

4  
"age" :"",

5  
"loaction" :"Iracemápolis-SP",

6  
"dev" :"Flutter/Dart",

7  
"language" :"Português Nativo",

8  
"education" :"Sistemas de Informação",

9  
"pos" :"Engenharia de Software para dispositivos móveis",

10 

11 

12 

13 
"about" :"Apaixonado por novas ideias e novos desafios."

14 
}

15 

Poeple talking

👋 Bem-vindo ao meu portfólio!

Sou um desenvolvedor Flutter apaixonado por transformar ideias em aplicativos modernos, rápidos e responsivos para Android, iOS e Web. Aqui, você encontrará alguns dos projetos que desenvolvi, minhas principais habilidades técnicas e formas de entrar em contato. Fique à vontade para explorar e descobrir como posso ajudar a dar vida ao seu próximo projeto!

Projetos

Dashboard Para Pedidios

Controle e Inteligência para o Seu Delivery O Painel de Pedidos é uma poderosa plataforma desenvolvida para transformar a gestão de pedidos e operações do seu negócio de delivery. Com uma interface moderna, intuitiva e repleta de recursos inteligentes, o sistema foi projetado para proporcionar eficiência, agilidade e visão estratégica, ajudando sua empresa a crescer com base em dados concretos.

Dashboard Inteligente: Visualização clara e completa dos pedidos em andamento, dados estratégicos e para tomada de decisão.
Usuários Ativos: Acompanhe a evolução de cliente usando o app, mês a mês.
Ticket Médio: Acompanhe a evolução do ticket médio diário, semanal ou mensal.
Tempo Médio: Tenha o controle do tempo dos seus pedido de forma simples.
Projeção: Antecipe demandas com base em dados históricos.
Gráficos Dinâmicos: Compreensão visual rápida para decisões assertivas.
Previsão do Tempo: Planeje com base nas condições climáticas locais.
Cobertura Efetiva: Mapa interativo com áreas de maior concentração de pedidos.
Relatórios Detalhados: Dados completos para melhorar o desempenho e produtividade.
Cadastro de Produtos: Simples, elegante e eficiente.
Controle Total de Pedidos: Imprima, altere status e acompanhe pedidos em tempo real.
Cupons de Desconto: Fidelize e atraia novos clientes com praticidade.
Horário de Funcionamento: Defina horários e dias de atendimento facilmente para seus clientes.
Apareças: Divulgue telefone, redes sociais e endereço em seu aplicativo.
Destaque de Produtos: Destaque produtos no banner do app para impulsionar vendas.
Produtos Mais Vendidos: Acesso rápido aos itens de maior saída.
PDV Integrado: Atendimento rápido com um ponto de venda moderno e funcional.
Controle de Mesas: Ideal para restaurantes, permite o gerenciamento de mesas e pedidos com simplicidade.

Aplicativo de Delivery

Apresento um aplicativo de delivery de alimentos personalizado, desenvolvido para atender empresas de todos os portes com elegância, eficiência e com identidade própria. Criado com Flutter, este projeto combina design moderno e funcionalidades robustas, permitindo que cada negócio tenha sua própria versão exclusiva.

Painel Intuitivo para Empresas: Gerencie Gerencie o aplicativo com facilidade por meio de um painel de controle amigável.
Visualização Atraente do Cardápio: Interface elegante e responsiva para exibir cardápio com fotos chamativas e descrições detalhadas, para uma melhor experiencia do cliente.
Processo de Pedido Eficiente: Pedido fluido: selecione, personalize, escolha a forma de pagamento e finalize em poucos passos, com cálculo automático do total.
Produtos Favoritos: Usuários podem salvar seus itens preferidos para acessá-los rapidamente em futuros pedidos.
Pesquisa Inteligente: Sistema de busca rápido e intuitivo para encontrar qualquer item no cardápio.
Acompanhamento em Tempo Real: Acompanhe cada etapa do pedido com atualizações automáticas e notificações em tempo real.
Login com Google e Segurança: Integração com Firebase para autenticação segura e armazenamento de dados, com login facilitado via Google.
Múltiplos Endereços de Entrega: Cadastro inteligente com preenchimento automático via API, permitindo múltiplos endereços e gerenciamento simples do endereço padrão.
Carrinho Intuitivo: Adicione itens ao carrinho com facilidade, confira os produtos selecionados em uma tela clara e organizada.

tempalte
Aplicativo Financeiro

Um Parceiro financeiro inteligente, aplicativo de gerenciamento financeiro projetado para empresas AFK Gestão que permite manter um controle preciso de suas despesas e receitas. Com uma interface intuitiva e recursos poderosos, o aplicativo oferece uma visão abrangente das finanças da sua empresa.

Lançamento de Despesas e Receitas: Registre todas as transações financeiras da sua empresa, desde pagamentos de fornecedores até recebimentos de clientes. Categorize as transações para facilitar a análise posterior.
Saldo das Contas: O aplicativo exibe o saldo atual da carteiras virtuais da empresa. Gráficos mostra a evolução do saldo ao longo do tempo.
Segurança e Privacidade: Utilizamos o MySQL para armazenar os dados com segurança. A autenticação de usuário garante que apenas pessoas autorizadas tenham acesso às informações financeiras.
Visual Atraente: Desenvolvido com Flutter e Dart, o aplicativo oferece uma experiência suave em dispositivos móveis.
Benefícios: Simplifique o gerenciamento financeiro da sua empresa com uma solução centralizada.
Tomada de Decisão Informada: Acompanhe o fluxo de caixa, identifique tendências e tome decisões embasadas.
Economia de Tempo: Reduza o tempo gasto em tarefas manuais de registro e reconciliação. O app é o parceiro ideal para manter suas finanças empresariais sob controle.

Aplicativo de E-commerce

Este é um aplicativo de e-commerce desenvolvido para AFK Gestão, focado em oferecer uma experiência de compra fluida e intuitiva para usuários que desejam uma boa experiência e praticidade com entrega em domicílio.

Visualização de Produtos: Interface elegante para explorar itens com imagens, preços, descrições e variações de tamanho e cor.
Pedidos Rápidos e Simples: Adicione produtos à sacola, escolha as opções desejadas e finalize o pedido com poucos toques.
Entrega Direta ao Cliente: Cadastro de endereço e horário de entrega preferido para maior comodidade.
Busca Inteligente: Pesquisa rápida e eficiente para localizar produtos com facilidade.
Sacola de Compras: Design moderno e prático para revisar itens antes da finalização do pedido.
Histórico e Pontuação: Acesso ao histórico de pedidos e acompanhamento dos pontos acumulados em compras anteriores.

Aplicativo de Senhas

Seu Guardião de Senhas e Dados de Cartão. Um aplicativo para uso pessoal desenvolvido para Android e iOS que permite que você armazene suas senhas e dados de cartão de crédito de forma segura e criptografada. Com uma interface gráfica intuitiva, o PassRecorder oferece uma maneira conveniente de gerenciar suas informações confidenciais.

Armazenamento Criptografado: Utiliza algoritmos de criptografia robustos para proteger suas senhas e dados de cartão. Suas informações são armazenadas de forma segura.
Gerenciamento de Senhas: Armazene suas senhas de forma organizada, o aplicativo permite que você crie categorias personalizadas para diferentes tipos de contas (por exemplo, e-mail, redes sociais, bancos).
Dados de Cartão de Crédito: Insira os detalhes do seu cartão de crédito, como número, data de validade e código de segurança. Essas informações são criptografadas e disponíveis apenas para você.
Visualização Gráfica: Apresentação dos cartões e senhas de forma visualmente agradável. Você pode ver ostipos dos cartões de crédito e ícones de contas salvas no aplicativo para melhor identificação das senhas armazenadas.
Login com Google: Faça login usando sua conta do Google para logar ou criar uma conta com apenas um clique.

Aplicativo de Petshop

Aplicativo completo desenvolvido em Flutter, voltado para o delivery de produtos pet, com foco em versatilidade, escalabilidade e personalização. Ideal para empresas de todos os tamanhos que buscam um sistema próprio, moderno e eficiente, com identidade visual exclusiva.

Painel Administrativo Intuitivo: Plataforma de gestão para empresas, com painel de controle amigável e de fácil navegação.
Apresentação Atraente dos Produtos: Interface responsiva e elegante, com e imagens e descrições detalhadas, para uma melhor experiencia do cliente.
Processo de Pedido Rápido e Fluido: Jornada de compra simplificada, seleção, pagamento e finalização em poucos toques.
Produtos Favoritos: Usuários podem marcar e salvar seus produtos preferidos para acesso rápido em futuras compras.
Pesquisa Inteligente: Sistema de busca otimizado para performance e facilidade de uso.
Acompanhamento em Tempo Real: Rastreamento do pedido com notificações automáticas em cada etapa da entrega.
Login Seguro com Google: Autenticação via Google para uma maior praticidade.
Suporte a Múltiplos Endereços: Cadastro de endereços com preenchimento automático por API e gerenciamento prático do endereço de entrega.
Carrinho de compra: Adição e visualização de produtos com praticidade em uma interface clara, moderna e funcional.

Em Breve

Próximos Projetos.

Service image

Desenvolvimento Android

Nesse projeto, será desenvolvido um aplicativo para Android, cuja funcionalidade principal será a tomada de pedidos na mesa em restaurantes.

Service image

Desenvolvimento Android

O projeto será desenvolvido para atender à necessidade de entregadores, e permitirá acesso a uma fila de entrega e alteração dos statos dos pedidos em tempo real.

Service image

Desenvolvimento Web

Nesse projeto, será criado um sistema para acompanhamento de pedidos na cozinha, onde será possível ter acesso a todos os pedidos em produção e controle dos mesmos, promovendo a praticidade e economia.

Arquitetura e Boas Práticas Em Meus Projetos.

MySQL
MySQL é um sistema de gerenciamento de banco de dados relacional (SGBD) de código aberto, amplamente utilizado em aplicações.

SQLite
SQLite é um banco de dados relacional leve, embutido e autônomo, amplamente usado em aplicações móveis, desktop e sistemas embarcados.

Firebase
Firebase é uma plataforma desenvolvida pelo Google que oferece serviços em nuvem para desenvolvimento de aplicativos web e mobile, permitindo criar apps robustos sem necessidade de back-end próprio.

Hive database
Hive é um banco de dados local, de alto desempenho e leve para Flutter e Dart, projetado especialmente para armazenamento offline com excelente desempenho e simplicidade.

Shared Preferences
Shared Preferences é uma forma simples de persistir dados locais, usada principalmente para salvar configurações, preferências e pequenos dados.

BLoC
Business Logic Component é um padrão de gerenciamento de estado cujo objetivo é separar a lógica de negócio da interface de usuário, promovendo uma arquitetura mais escalável e reutilizável.

Provider
Provider é um padrão de gerenciamento de estado que permite compartilhar dados de forma eficiente entre widgets na árvore de componentes. Ele atua como uma forma simplificada de injeção de dependência e escuta de mudanças de estado.

ValueNotifier
ValueNotifier é uma classe simples e leve do Flutter usada para gerenciar e notificar mudanças de estado reativas, ideal para cenários onde você precisa acompanhar e reagir à alteração de valor.


Layered Architecture ou MVC com Repository
Uso uma arquitetura em camadas que me permite ter uma maior organização do código, que separa a aplicação em diferentes níveis (camadas), cada uma com responsabilidades específicas e bem definidas. Isso facilita a manutenção e permite a inversão de dependência, reaproveitamento e um fácil entendimento do código, além de um baixo acoplamento.
Model: Representa os dados.
Data: Responsável por acessar e persistir dados.
Controller: Gerencia a lógica da aplicação, estado, regra de negócios e intermediando entre dados e interface.
View: Interface do usuário, que exibe os dados e recebe interações.

lib/
 └── src/
      ├── models/
      │    ├── user_model.dart
      │    ├── product_model.dart
      │
      ├── views/
      │    ├── home_page.dart
      │    ├── login_page.dart
      │    └── product_page.dart
      │
      ├── data/
      │    ├── datasources/
      │    │     ├── api_datasource.dart
      │    │     └── local_datasource.dart
      │    └── repositories/
      │          ├── user_repository_impl.dart
      │          └── product_repository_impl.dart
      │
      ├── controllers/
      │    ├── user_controller.dart
      │    ├── product_controller.dart
      │    └── auth_controller.dart
      │
      └── core/
           ├── constants.dart
           └── utils.dart



Clean Architecture
Clean Architecture é um padrão de arquitetura de software proposto por Robert C. Martin (Uncle Bob) que tem como objetivo criar sistemas mais modulares, testáveis, independentes de frameworks e de fácil manutenção. Ela organiza o código em camadas bem definidas, com dependências que sempre apontam para o centro. Usando esses conceitos, implemento-os em minha arquitetura para obter um código com maior legibilidade, manutenibilidade e reutilizabilidade.

lib/
 └── src/
      ├── domain/
      │    ├── entities/
      │    │     └── task.dart
      │    ├── repositories/
      │    │     └── task_repository.dart
      │    └── usecases/
      │          ├── get_tasks.dart
      │          └── add_task.dart
      │
      ├── data/
      │    ├── models/
      │    │     └── task_model.dart
      │    ├── datasources/
      │    │     └── task_local_datasource.dart
      │    └── repositories/
      │          └── task_repository_impl.dart
      │
      ├── presentation/
      │    ├── bloc/
      │    │     └── task_bloc.dart
      │    └── pages/
      │          └── task_page.dart
      │
      └── core/
      |    └── global_task.dart
      └── main.dart


SOLID
S – Single Responsibility Principle (SRP)
Cada classe deve ter apenas uma responsabilidade.
Ex.: uma classe UserService só cuida da lógica de usuários, não de envio de e-mails.

O – Open/Closed Principle (OCP)
Software deve estar aberto para extensão, mas fechado para modificação.
Ex.: você pode adicionar novas estratégias de pagamento sem alterar o código existente.

L – Liskov Substitution Principle (LSP)
Subtipos devem poder substituir seus tipos base sem quebrar o código.
Ex.: se Bird tem um método fly(), uma subclasse Sparrow deve poder usá-lo sem problemas, mas Penguin não, então talvez Penguin não deva herdar Bird com fly().

I – Interface Segregation Principle (ISP)
Prefira várias interfaces específicas a uma única interface genérica.
Ex.: em vez de uma interface IMultiDevice com métodos de impressora, scanner e fax, crie interfaces separadas (IPrinter, IScanner).

D – Dependency Inversion Principle (DIP)
Dependa de abstrações, não de implementações concretas.
Ex.: UserRepository deve depender de uma interface Database, não de MySqlDatabase diretamente.

Código Limpo:
Um código que é fácil de ler, entender, manter e evoluir.
Popularizado por Robert C. Martin (Uncle Bob).

Principais características
Nomes claros e significativos: Variáveis, funções e classes devem explicar o que fazem.
Ex.: calculateTotalPrice() é melhor que calc1().

Funções pequenas e coesas: Cada função deve ter uma única responsabilidade.
Evite funções longas com múltiplos objetivos.

Classes coesas: Alta coesão: cada classe faz uma única coisa bem feita.
Alinha com o Single Responsibility Principle (SRP) do SOLID.

Evitar código duplicado: Reaproveite funções e módulos.
Reduz erros e facilita manutenção.

Estrutura consistente: Indentação, espaçamento, ordem de métodos e organização de arquivos consistente.
Tratamento de erros explícito

Não ignore exceções: Use mensagens claras e logging adequado.

Testável: Código limpo deve ser fácil de testar com unit e widget tests no Flutter.

Comentários mínimos e úteis: Prefira código autoexplicativo. Comentários só quando a intenção não for clara pelo código.

Baixo Acoplamento:
Baixo Acoplamento é um princípio da engenharia de software que busca manter os módulos ou classes de um sistema o mais independentes possível uns dos outros. Quando um sistema tem baixo acoplamento, mudanças em uma parte do código têm pouco ou nenhum impacto em outras partes, o que facilita manutenção, testes e evolução da aplicação.


// Classe de serviço independente
class EmailService {
  void sendEmail(String message) => print("Enviando email: $message");
}

// Classe que depende da abstração do serviço
class NotificationManager {
  final EmailService service; // dependência injetada

  NotificationManager(this.service);

  void notifyUser(String message) {
    service.sendEmail(message); // usa o serviço sem criar internamente
  }
}

void main() {
  final emailService = EmailService();
  final notifier = NotificationManager(emailService);

  notifier.notifyUser("Nova mensagem disponível!");
}


Alta Coesão:
Alta Coesão refere-se ao grau em que os elementos de uma classe ou módulo estão focados em uma única responsabilidade, quanto mais coesa uma classe, mais fácil de entender, manter e testar ela éle. Uma classe alta coesa tem uma unica responsabilidade e realiza essa responsabilidade com eficiência.
Exemplo com Alta Coesão:

class AuthService {
    void login() {...}
}

class EmailService {
    void sendEmail() {...}
}

class ReportService {
    void generateReport() {...}
}


Exemplo com Baixa Coesão:

UserManager {
    void login() {...}
    void sendEmail() {...}
    void generateReport() {...}
}

Orientação a Objetos (OOP)
OOP é um paradigma de programação baseado no conceito de "objetos", que são estruturas que combinam dados (atributos) e comportamentos (métodos). Esse modelo busca representar entidades do mundo real dentro do código, tornando o desenvolvimento mais modular, reutilizável e organizado.


Singleton
Um padrão de projeto (design pattern) da programação orientada a objetos que garante que uma classe tenha apenas uma única instância durante toda a execução do programa e fornece um ponto global de acesso a ela.

class Logger {
  // Instância única
  static final Logger _instance = Logger._internal();

  // Construtor interno
  Logger._internal();

  // Fábrica para retornar a instância única
  factory Logger() => _instance;

  void log(String message) {
    print("LOG: $message");
  }
}

void main() {
  var logger1 = Logger();
  var logger2 = Logger();

  logger1.log("Iniciando aplicação");

  print(logger1 == logger2); // true, mesma instância
}


Repository
padrão de projeto utilizado para abstrair o acesso a dados em uma aplicação. Ele atua como uma camada intermediária entre a lógica de negócio e as fontes de dados (como banco de dados, APIs, etc), centralizando e organizando as operações de leitura e escrita.
O objetivo do padrão Repository é separar as responsabilidades, facilitando testes, manutenção e mudanças de tecnologia sem impactar outras partes do sistema.

// Modelo de usuário
class UserModel {
  final String name;
  UserModel(this.name);
}

// Repository
class UserRepository {
  final List _users = [];

  void addUser(UserModel user) => _users.add(user);

  List getAllUsers() => List.unmodifiable(_users);
}

void main() {
  final repo = UserRepository();

  repo.addUser(UserModel("João"));
  repo.addUser(UserModel("Maria"));

  for (var user in repo.getAllUsers()) {
    print(user.name);
  }
}



Observer
Observer é um padrão de projeto comportamental que define uma relação de dependência entre objetos, onde um objeto (o observado) notifica automaticamente outros objetos (os observadores) sempre que seu estado muda.
Esse padrão é muito utilizado em sistemas reativos e em gerenciamento de estado, pois permite que diferentes partes do sistema reajam automaticamente a mudanças de dados, sem acoplamento direto entre elas.

// Subject
class NewsPublisher {
  List _subscribers = [];

  void subscribe(Function(String) subscriber) {
    _subscribers.add(subscriber);
  }

  void notify(String news) {
    for (var subscriber in _subscribers) {
      subscriber(news);
    }
  }
}

void main() {
  final publisher = NewsPublisher();

  // Observers
  publisher.subscribe((news) => print("App1 recebeu: $news"));
  publisher.subscribe((news) => print("App2 recebeu: $news"));

  // Notificação
  publisher.notify("Nova atualização disponível!");
}



Injeção de Dependência (DI)
DI é um padrão de projeto usado para fornecer dependências a um objeto de fora, em vez de o próprio objeto criá-las internamente. O objetivo é desacoplar as classes, facilitando testes, manutenção e reutilização de código.
Com DI, as classes recebem suas dependências prontas — geralmente por construtor, método setter ou injeção direta pelo framework.

// Implementação concreta
class Database {
  void save(String data) => print('Salvando: $data');
}

// Classe que recebe a dependência por construtor
class UserRepository {
  final Database db;

  UserRepository(this.db); // injeção da dependência

  void saveString(String name) {
    db.save(name);
  }
}

void main() {
  final database = Database();
  final repo = UserRepository(database); // injetando a dependência
  repo.saveString("Hello World!");
}



Interface
Uma abordagem que promove a programação orientada a abstrações, e não a implementações concretas. Em vez de uma classe depender diretamente de outra classe específica (o que gera alto acoplamento), ela depende de uma interface (ou abstração) que define um contrato de comportamento.

// Definindo a interface
abstract class Vehicle {
  void start();
  void stop();
}

// Implementação 1
class Car implements Vehicle {
  @override
  void start() => print("Carro ligado");

  @override
  void stop() => print("Carro desligado");
}

// Implementação 2
class Bike implements Vehicle {
  @override
  void start() => print("Bicicleta em movimento");

  @override
  void stop() => print("Bicicleta parada");
}

void main() {
  Vehicle myCar = Car();
  Vehicle myBike = Bike();

  myCar.start(); // Carro ligado
  myBike.start(); // Bicicleta em movimento
}


Decorator
O Decorator permite adicionar funcionalidades a um objeto dinamicamente, sem modificar sua classe original, é útil quando você quer estender o comportamento de forma flexível, mantendo baixo acoplamento.

// Interface
abstract class Notifier {
  void send(String message);
}

// Implementação concreta
class EmailNotifier implements Notifier {
  @override
  void send(String message) => print("Enviando e-mail: $message");
}

// Decorator
class SMSDecorator implements Notifier {
  final Notifier wrapped;
  SMSDecorator(this.wrapped);

  @override
  void send(String message) {
    wrapped.send(message); // mantém comportamento original
    print("Enviando SMS: $message"); // adiciona comportamento extra
  }
}

void main() {
  Notifier notifier = EmailNotifier();
  notifier = SMSDecorator(notifier); // adiciona funcionalidade

  notifier.send("Hello, World!");
}



Strategy
É um padrão de projeto que define uma família de algoritmos ou comportamentos, encapsula cada um e os torna intercambiáveis. Permite que o comportamento de um objeto mude em tempo de execução sem modificar seu código.

// Estratégia (interface)
abstract class LoginStrategy {
  void login();
}

// Estratégia concreta 1
class UserPasswordLogin implements LoginStrategy {
  @override
  void login() => print("Login com usuário/senha");
}

// Estratégia concreta 2
class GoogleLogin implements LoginStrategy {
  @override
  void login() => print("Login com Google");
}

// Contexto
class AuthService {
  LoginStrategy strategy;
  AuthService(this.strategy);

  void authenticate() => strategy.login();
}

void main() {
  var auth = AuthService(UserPasswordLogin());
  auth.authenticate(); // Login com usuário/senha

  auth.strategy = GoogleLogin();
  auth.authenticate(); // Login com Google
}


Adapter
O Adapter permite que interfaces incompatíveis trabalhem juntas, ele atua como um “tradutor”, convertendo a interface de uma classe em outra esperada pelo cliente.

// Classe existente com método incompatível
class OldPrinter {
  void printText(String text) => print("Imprimindo: $text");
}

// Interface esperada pelo cliente
abstract class Printer {
  void print(String text);
}

// Adapter
class PrinterAdapter implements Printer {
  final OldPrinter oldPrinter;
  PrinterAdapter(this.oldPrinter);

  @override
  void print(String text) {
    oldPrinter.printText(text); // traduz a chamada
  }
}

void main() {
  Printer printer = PrinterAdapter(OldPrinter());
  printer.print("Olá, mundo!");
}

APIs
API (Interfaces de Programação de Aplicações) são conjuntos de regras e padrões que permitem que sistemas diferentes se comuniquem entre si pela internet. Elas funcionam como pontes entre aplicações, permitindo envio e recebimento de dados de forma estruturada, geralmente usando o protocolo HTTP/HTTPS.

A aplicação conta com diferentes níveis de testes para garantir qualidade, confiabilidade e manutenção do código:

* Testes Unitários: validam funções, classes e métodos isoladamente, garantindo que cada parte da lógica de negócio funcione como esperado.
* Testes de Widgets: verificam a interface e a interação de widgets específicos, assegurando que a UI responda corretamente às mudanças de estado.
* Testes de Integração: avaliam o funcionamento conjunto de múltiplos módulos e camadas da aplicação, simulando fluxos reais do usuário e garantindo que todos os componentes trabalhem em harmonia.

Flutter/Dart
Flutter é um framework criado pelo Google, focado na criação de aplicativos nativos multiplataforma com uma única base de código. Com o Flutter, é possível desenvolver para Android, iOS, Web, Desktop e até sistemas embarcados, tudo com alta performance e aparência consistente.
O Flutter utiliza a linguagem Dart, também desenvolvida pelo Google. O Dart é uma linguagem moderna, orientada a objetos, com sintaxe simples e familiar para quem já trabalha com linguagens como Java, C# ou JavaScript.
Meeting

Pronto para elevar sua presença digital?

Contate-me e vamos construir algo incrível juntos.