Skip to content

Aplicativo Híbrido para o calculo do imc com persistência de dados

Notifications You must be signed in to change notification settings

juanfernandez13/imc_app

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

34 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Calculadora de Imc em Flutter

linguagem tamanho do projeto tamanho do projeto

Aplicativo mobile híbrido para o calculo do Índice de Massa Corporal (IMC). Armazenando informações como altura, peso, idade, sexo e status. Para criar esse projeto foi utilizado a linguagem Dart e o framework Flutter. Como o objetivo da aplicação era treinar a persistência de dados localmente com FLutter, por isso foi criado uma classe abstrata chamada ImcRepository onde contém os principais métodos da aplicação e são implementadas nas classes HiveImcModel e SqfliteImcModel, que utiliza o banco NoSQL Hive e SQL SQFlite.

Telas do Aplicativo

Funcionalidades

  • Calcular IMC:Realizar o calculo do imc com base nas informações selecionadas em cada componente.
  • Alert Dialog:Uso do Widget AlertDialog para gerar avisos e receber informações.
  • Calculo do Peso ideal:Usando um método na class ImcModel para calcular o intervalo entre o peso mínimo e máximo do peso ideal.
  • Modal com o resultado:Uso do Widget showModalBottomSheet para apresentar o resultado do Imc.
  • Filtro de pesquisa:Listagem das leituras salvas filtrando o status do Imc.
  • Persistência de dados:Uso do package Hive e SQFlite para persistência dos dados.
  • Criação de um Adapter:Criação de um Adapter para o ImcModel com auxílio do Hive Generator e o Build Runner.
  • Fácil navegação: Uso dos Widgets PageView e BottomNavigationBar para uma fácil navegação entre as telas.

Packages

Hive x SQFlite

O Hive é um banco de dados local do tipo chave-valor leve e muito rápido, adaptado para todas as plataformas suportadas pelo Flutter, Ele se utiliza do conceito de caixas, sendo que uma caixa não possuem uma estrutura fixa e podem conter qualquer tipo de dado que o programador desejar.

    //Um exemplo de como iniciar uma caixa com o Hive
    Future iniciarCaixa() async {
    if (Hive.isBoxOpen('imc')) {
      _box = Hive.box('imc');
    } else {
      _box = await Hive.openBox('imc');
    }
  }

1000 leituras x 1000 escritas

Com base no Benchmark disponível na documentação do hive, percebemos o quão grande é a diferença de perfomance do Hive entre seus princípais concorrentes como o SharedPreferences e o SQFlite, principalmente em momentos de escrita.

Já o SQFlite é um banco de dados SQL, ou seja, um banco de dados mais tradicional formado por tabelas e colunas fixas, onde são armazenadas informações. Diferente do Hive o SQFlite não possui suporte para todas as plataformas onde o flutter Flutter. Além disso o SQFlite possui mais linhas de códigos e comandos funcionar, sendo assim, acaba sendo mais dificultoso seu aprendizado se comparado com o Hive.

  //Um exemplo de como iniciar uma Tabela com o SQFlite
  Map<int, String> scripts = {
  1: '''CREATE TABLE imc (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    nome TEXT,
    genero TEXT,
    altura INTEGER,
    peso INTEGER,
    imc REAL,
    status TEXT,
  );''',
};

  static Database? db;

  Future<Database> obterDatabase() async {
    if (db == null) {
      return await iniciarBancoDeDados();
    } else {
      return db!;
    }
  }

  Future iniciarBancoDeDados() async {
    var db = openDatabase(path.join(await getDatabasesPath(), 'databaseImc.db'),
        version: scripts.length, onCreate: (Database db, int index) async {
      for (var i = 1; i <= scripts.length; i++) {
        await db.execute(scripts[i]!);
        debugPrint(scripts[i]);
      }
    }, onUpgrade: (Database db, int oldVersion, int newVesion) async {
      for (var i = oldVersion + 1; i <= scripts.length; i++) {
        await db.execute(scripts[i]!);
        debugPrint(scripts[i]);
      }
    });
    return db;
  }

Por fim, ambos bancos necessitam de outros packages para criar caminho ao diretório. No caso foi utilizado o Path Provider. Para o Hive ainda houve a adição de 2 outros packages para facilitar a criação de um objeto que possa ser armazenado na caixa, foi utilizado o Hive Generator com o Build Runner para gerar o código de um adapter para a classe que seria armazenada.

Widgets

Conceitos abordados

  • Abstração
  • Atributos
  • Classes
  • Encapsulamento
  • Herança
  • Interfaces
  • Polimorfismo
  • Métodos

About

Aplicativo Híbrido para o calculo do imc com persistência de dados

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published