Universidade Virtual Do Estado de Sao Pa
Universidade Virtual Do Estado de Sao Pa
Universidade Virtual Do Estado de Sao Pa
ENGENHARIA DA COMPUTAÇÃO
SÃO PAULO – SP
2019
DANIEL RONCAGLIA CORREIA DOS SANTOS
SÃO PAULO – SP
2019
DANIEL RONCAGLIA CORREIA DOS SANTOS
BANCA EXAMINADORA
________________________________________________________
Prof.
Presidente
________________________________________________________
Prof.
Membro
________________________________________________________
Prof.
Membro
RESUMO
O projeto descreve o desenvolvimento ágil de um aplicativo mobile
destinando a ser modelo aos prestadores de serviços locais. O exemplo hipotético
escolhido para o aplicativo chamado Fixbi é o de uma mecânica de bicicleta. Pelo
celular, após logar sistema, os ciclistas podem chamar atendimentos de um
mecânico e consultar seus atendimentos. O documento apresenta um histórico da
computação com foco no mobile explicando as principais ferramentas. Para o
sistema, é montado um banco de dados com as tabelas tipo usuário, usuários,
ciclistas, mecânicos e antedimentos. Para a aplicação back-end foi codificado uma
aplicação em linguagem C#. Os testes de funcionamento da aplicação fazem parte
do projeto. As páginas do aplicativo tiveram seu desenho feitos através de vetores. A
implantação do front-end mobile é realizada com as ferramentas mais recentes e
testada por emulador virtual. A conclusão traça projeções para a continuidade.
ABSTRACT
This project describes the agile development of a mobile application to
serve as a model for local service providers. The hypothetical example chosen for the
application a bicycle mechanic called Fixbi. By cell phone, after logging in, cyclists
can call a mechanic and consult their calls. This document presents a history of
computing focused on mobile explaining the main tools for that. A database is set up
with the tables: user type, user, cyclist, mechanic and precedent tables. For the back-
end application was encoded a C # language application. The application run tests
are part of the project. The pages of the application had their drawing done through
vectors. The deployment of the mobile front-end is accomplished with the latest tools
and tested by virtual emulator. The conclusion draws projections for continuity.
1 INTRODUÇÃO...........................................................................................................5
1.1 Definição.............................................................................................................5
1.2 Motivação............................................................................................................7
1.3 Justificativa..........................................................................................................9
2 REVISÃO METODOLÓGICA..................................................................................12
2.1 Lógica de programação....................................................................................12
2.2 Metologia ágil (Scrum)......................................................................................12
2.3 Controle de versões (Git)..................................................................................15
2.4 Processos de criação........................................................................................16
3 OBJETIVOS.............................................................................................................18
3.1 Objetivo geral....................................................................................................18
3.2 Objetivos específicos........................................................................................18
4 APLICATIVO FIXBI..................................................................................................19
4.1 Full Stack...........................................................................................................19
4.2 Banco de dados (SQL)......................................................................................19
4.3 Back-end (API – C#).........................................................................................27
4.4 Teste (Postman)................................................................................................42
4.5 Design (UI/UX)..................................................................................................46
4.6 Mobile (React Native)........................................................................................49
5 CONSIDERAÇÕES FINAIS.....................................................................................67
5.1 Análise de resultados........................................................................................67
5.2 Projeções para o projeto...................................................................................68
6 REFERÊNCIAS........................................................................................................69
5
1 INTRODUÇÃO
O mercado de aplicativos para plataformas mobile tem crescido de forma
exponencial desde o início dos 2000 por qualquer indicador disponível publicamente
e deve manter esta tendência pelos próximos anos. Hoje sendo o principal dispositivo
de mídia digital em número de pessoas que os utilizam, os smartphones (telefones
inteligentes) estão criando uma alta demanda por novos sistemas.
Este projeto apresenta o desenvolvimento, utilizando metologia ágil, de um
aplicativo mobile que pode ser usado como modelo para prestadores de serviços. O
estudo de caso é o de uma mecânica de bicicleta, chamada de FixBi (Figura 1), no
qual os ciclistas poderão solicitar, através do celular, o serviço de um profissional
especializado no conserto e manutenção de bicicletas.
Este documento é um relatório que apresenta as ferramentas e o
desenvolvimento passo a passo do banco de dados do serviço, do back-end da
aplicação e do aplicativo mobile.
Fonte: autor
1.1 Definição
O termo “app” foi escolhido em 2010 como a “palavra do ano” pela
American Dialect Society, concurso que destaca as expressões que ganham
presença nas comunicações nos Estados Unidos. O “app” é uma forma abreviada
para se referir aos aplicativos, que são programas de computador que funcionam em
6
entre as suas novidades uma tela de controle multitoque (touch screen). “A Apple
reinventa o telefone”, afirma o executivo da empresa (JOBS, 2007).
No mesmo ano do lançamento do iPhone, com o seu sistema iOS, a
Google disponibiliza o sistema operacional Android, que funciona em diversos
modelos de smartphones.
Uma das tendências do mercado de desenvolvimento de sistemas digitais
é projetar a arquitetura do produto desde o início tendo como foco a ideia de “mobile
first” (móvel primeiro). Um dos divulgadores do conceito é o designer Luke
Wroblewski. Desde 2011, o designer aborda a questão explicando porque sites e
aplicativos devem ser projetados para os dispositivos móveis. “Projetar para
dispositivos móveis primeiro não apenas prepara você para o crescimento explosivo
e as oportunidades neste espaço, mas também obriga a focar e permite inovar”,
argumenta o designer. Wroblewski apresenta três pontos em favor da ideia: o mobile
cresce como uma nova oportunidade, permite uma aplicação com foco e é capaz de
trazer inovações para os sistemas. Ele lembra que é preciso considerar fatores como
múltiplos tamanhos de telas com a tecnologia de desempenho otimizado com acesso
touch e sensores de movimento e localização (WROBLEWSKI, 2011).
1.2 Motivação
Os números do mercado mobile chegam às cifras de bilhões. Os dados
mais aprofundados sobre a presença dos dispositivos mobiles são da Global System
for Mobile Communications (GSMA), entidade baseada em Londres que congrega
mais de 1.200 empresas operadoras de redes mobile.
Relatório divulgada pela GSMA, em fevereiro de 2019, contabiliza 5,1
bilhões de pessoas em todo o mundo assinando serviços móveis, o que representa
67% da população global. Até 2025, a estimativa é de que mais 710 milhões de
pessoas assinarão pela primeira vez serviços móveis (5,8 bilhões – 71% da
população). Dessas conexões hoje, 60% são acessadas por smartphones, sendo
79% na estimativa para 2025. Segundo a pesquisa, atualmente 3,6 bilhões de
pessoas acessam a internet pelo mobile (47% da população), chegando a 5 bilhões
em sete anos (61% da população). O GSMA informa que atualmente 43% das
conexões são do tipo 4G, ultrapassando o 2G, com a estimativa de chegar a 59% em
2025. Em sete anos, o G5 deve ter 1,4 bilhão de conexões. A indústria mobile já
representa 4,6% do PIB mundial (US$ 3,9 trilhões), gerando 14 milhões de empregos
8
1.3 Justificativa
Com a tecnologia definida para este projeto (aplicativo mobile), é preciso
justificar a escolha do tema que o sistema aborda, no caso em estudo uma mecânica
de bicicleta com atuação local.
Por estarem presente em um dispositivo digital que tem como principal
função a troca de informações, as aplicações mobile são eminentemente canais de
comunicação entre duas partes. No campo dos negócios, recursos do smartphone
(geolocalização, fotografia, captação e projeção de áudio e vídeo, identificação
digital, sensor de movimento) permitem interações diferentes para a troca de
produtos e serviços. O alcance das mudanças ainda será verificado, mas o mercado
como um todo já foi impactado por essa tecnologia.
Divulgada em junho de 2019, pesquisa que monitora o uso de aplicativos
no Brasil identifica um crescimento de sistemas de compartilhamento de transporte e
de entrega de produtos. Segundo o levantamento “Panorama Mobile Time – Opinion
Box”, feita em abril com 1.763 brasileiros que acessam internet e possuem
smartphone, 99 e o iFood ocupam os 13º e 16º lugares entre os 20 mais populares
(Figura 2). O Uber está na quinta posição, superando pela primeira vez o Facebook
Messenger (MOBILE TIME; OPINION BOX, 2019).
Fonte: autor
Fonte: autor
A ampla maioria dos entrevistados afirmam que gastam até R$ 100 por
mês com a manutenção de suas bicicletas, apontando para baixa complexidade dos
serviços e seu viés predominante local (Figura 5).
Fonte: autor
12
2 REVISÃO METODOLÓGICA
2.1 Lógica de programação
Escrever um programa de computador é como contar uma história com
lógica. A habilidade de ler e escrever textos está presente na ampla maioria da
população, enquanto a capacidade de ler e escrever códigos é algo raro, o que tende
a mudar nas próximas décadas.
A lógica, que tem a origem em Aristóteles (384 a.C – 322 a.C), é a análise
de métodos de raciocínio, tendo como interesse primordialmente a forma e não o
conteúdo dos argumentos. Conforme definição feita por João Nunes de Souza,
professor de lógica para ciência da computação na Universidade Federal de
Uberlândia, ao se incrementar a utilização da lógica, ela se torna o estudo do
raciocínio, do pensamento correto e verdadeiro, da demonstração científica, de
pensamentos não científicos, ou de regras para verificação da verdade ou falsidade
de um pensamento (SOUZA, 2015).
No livro “A history of modern computing”, o especialista Paul Ceruzzi
define que os computadores foram inventados para “computar”, o seja resolver
problemas matemáticos complexos. Mas hoje os computadores armazenam e
recuperam dados, gerenciam redes de comunicações, processam multimídia, entre
outras funções. Ceruzzi identifica que apenas nos anos 1940 a palavra “computador”,
que era usado para pessoas que resolviam equações, foi pela primeira vez
transferida para uma máquina. “Não é que o computador acabou não sendo usado
para cálculos. Isso, pelo menos, seus inventores previram. Mas as pessoas
encontram maneiras de fazer para que fizesse muito mais”, comenta. Na obra,
Ceruzzi apresenta um resumo da área da computação entre a década de 1940 e
1990 apresentando as linguagens de programação, a evolução dos dispositivos
eletrônicos e os principais atores (CERUZZI, 1998).
Fonte: autor
papéis que podem ser colados em superfícies). Existem hoje diversas ferramentas
que permitem a gestão do quadro de maneira online e colaborativa. Para este projeto
foi escolhido o aplicativo Trello (Figura 2)2.
Fonte: autor
Fonte: autor
3 OBJETIVOS
4 APLICATIVO FIXBI
dados (SGDB). Esses sistemas (Figura 9) são um software de uso geral para facilitar
o processo de definição, construção, manipulação e compartilhamento de bancos
entre usuários e aplicações. Um banco de dados pode ter um ciclo de vida de muitos
anos, fazendo que o SGBD precise ser capaz de manter o sistema permitindo a sua
evolução à medida que os requisitos mudam (ELMASRI; NAVATHE, 2007).
Tabela 1 – TIPO_USUARIOS
ID_TIPO_USUARIO TIPO_USUARIO
1 Mecanico
2 Ciclista
Fonte: autor
Tabela 2 – USUARIOS
Tabela 3 – CICLISTAS
Tabela 4 – MECANICOS
ID_MECANICO ID_USUARIO NOMEMECANI TELEFONE INFORMACOES
1 1 Daniel Santos (11)9999-1001 Câmbio
Fonte: autor
Tabela 5 – ATENDIMENTOS
Fonte: autor
23
Fonte: autor
INSERT INTO CICLISTAS VALUES (2, 'Mariana Santos', '(11)9999-1001', 'Tem uma MTB')
,(2, 'Suely Santos', '(11)9999-1002', 'Vai comprar nova bike')
,(3, 'José Santos', '(11)9999-1003', 'Tem uma cargueira')
SELECT * FROM CICLISTAS
CREATE ATENDIMENTOS(
ID_ATENDIMENTO INT PRIMARY KEY IDENTITY
,ID_CICLISTA INT FOREIGN KEY REFERENCES CICLISTAS(ID_CICLISTA)
,ID_MECANICO INT FOREIGN KEY REFERENCES MECANICOS(ID_MECANICO)
,DATA_HORARIO DATETIME NOT NULL
,DESCRICAO_ATENDIMENTO VARCHAR(200)
,SITUACAO_ATENDIMENTO VARCHAR(200) NOT NULL
);
USUARIOS
ID_USUARIO
ID_TIPO_USUARIO
EMAIL_USUARIO
SENHA_USUARIO
MECANICOS
CICLISTAS
ID_MECANICO
TIPO_USUARIOS ID_CICLISTA
ID_USUARIO
ID_TIPO_USUARIO ID_USUARIO
NOME_MECANICO
TIPO_USUARIO NOME_CICLISTA
TELEFONE_MECANICO
TELEFONE_CICLISTA
INFORMACOES_MECANICO
INFORMACOES_CICLISTA
ATENDIMENTOS
ID_ATENDIMENTO
ID_CICLISTA
ID_MECANICO
DATA_HORARIO
DESCRICAO_ATENDIME...
Fonte: autor
SITUACAO_ATENDIMEN...
Fonte: autor
27
uma linguagem orientada a objetos, mas tem suporte para programação orientada a
componentes. O design contemporâneo de software depende cada vez mais de
componentes de software na forma de pacotes de funcionalidade autocontidos e
auto-descritivos. A chave é que eles apresentam um modelo de programação com
propriedades, métodos e eventos. Ainda segundo a Microsoft, os componentes
possuem atributos que fornecem informações declarativas sobre o componente; e
eles incorporam sua própria documentação. O C # fornece construções de linguagem
para suportar diretamente esses conceitos, tornando o C # uma linguagem muito
natural para criar e usar componentes de software (MICROSOFT, 2019).
Let´s code (Figuras 14)5.
Fonte: autor
Fonte: autor
Após criar um Aplicativo Web ASP.NET Core do tipo vazio (Figura 15), é
preciso escolher o nome do projeto e o local onde o aplicativo será gravado. A API do
Fixbi está localizada na pasta Back-end do repositório GitHUB.
No Visual Studio, é preciso baixar alguns pacotes NuGet (gerenciador de
bibliotecas para a plataforma .NET) para que a API funcione corretamente
Microsoft.EntityFrameworkCore.Design; Microsoft.EntityFrameworkCore.SqlServer;
Microsoft.EntityFrameworkCore.Tools; Swashbuckle.AspNetCore;
Swashbuckle.AspNetCore.Swagger (Figura 16).
As ferramentas do Visual Code Studio podem ser acessadas pela barra de
busca com a IDE também disponível em português. Como pequenos “tijolos”, os
pacotes trazem rotinas de códigos que serão usados para o projeto, dispensando do
desenvolvedor back-end a necessidade de codificar linha por linha todas as funções.
O NuGet é um gerenciador de pacotes gratuito e de código aberto
projetado para a plataforma de desenvolvimento Microsoft (Não confundir com o
lanche chamado nugget). Desde a sua introdução em 2010, o NuGet evoluiu para um
ecossistema de ferramentas e serviços distribuídos como extensão do Visual Studio
(MICROSOFT, 2018).
31
Fonte: autor
Figura 17 – Pastas Domains, com classes das tabelas, e Contexts, com FixbiContext
Fonte: autor
using System;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.IdentityModel.Tokens;
using Newtonsoft.Json;
using Swashbuckle.AspNetCore.Swagger;
namespace Fixbi
{
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc()
.AddJsonOptions(options =>
{
33
options.SerializerSettings.NullValueHandling =
NullValueHandling.Ignore;
})
.SetCompatibilityVersion(Microsoft.AspNetCore.Mvc.CompatibilityVersion.
Version_2_1);
services.AddSwaggerGen(c =>
{
c.SwaggerDoc("v1", new Info { Title = "Fixbi", Version = "v1" });
});
services.AddAuthentication(options =>
{
options.DefaultAuthenticateScheme = "JwtBearer";
options.DefaultChallengeScheme = "JwtBearer";
}).AddJwtBearer("JwtBearer", options =>
{
options.TokenValidationParameters = new TokenValidationParameters
{
ValidateIssuer = true,
ValidateAudience = true,
ValidateLifetime = true,
IssuerSigningKey = new
SymmetricSecurityKey(System.Text.Encoding.UTF8.GetBytes("Fixbi.Api")),
ClockSkew = TimeSpan.FromMinutes(30),
ValidIssuer = "Fixbi",
ValidAudience = "Fixbi"
};
});
services.AddCors(options =>
{
options.AddPolicy("CorsPolicy",
builder => builder.AllowAnyOrigin()
.AllowAnyMethod()
.AllowAnyHeader()
.AllowCredentials());
});
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
34
app.UseAuthentication();
app.UseSwagger();
app.UseSwaggerUI(c =>
{
c.SwaggerEndpoint("/swagger/v1/swagger.json", "Fixbi");
});
app.UseCors("CorsPolicy");
app.UseMvc();
}
}
}
Fonte: autor
Fonte: autor
namespace Fixbi.ViewModels
{
public class LoginViewModel
{
[Required(ErrorMessage = "Infome seu e-mail")]
public string Email { get; set; }
[Required(ErrorMessage = "Infome seu senha")]
[StringLength(10, MinimumLength = 3, ErrorMessage = "Até 10 caracteres")]
public string Senha { get; set; }
}
}
Fonte: autor
namespace Fixbi.Interfaces
{
interface IUsuarioRepository
{
Usuarios BuscarPorEmailESenha(LoginViewModel login);
}
}
Fonte: autor
using Microsoft.EntityFrameworkCore;
namespace Fixbi.Repositories
{
public class UsuarioRepository : IUsuarioRepository
{
public Usuarios BuscarPorEmailESenha(LoginViewModel login)
{
using (FixBiContext ctx = new FixBiContext())
{
return ctx.Usuarios.Include(x =>
x.IdTipoUsuarioNavigation).FirstOrDefault(x => x.EmailUsuario == login.Email &&
x.SenhaUsuario == login.Senha);
}
}
} }
Fonte: autor
Com o Model e o View do login prontos, é preciso codificar o controlador
na pasta Controller na classe LoginController.cs (Figura 23).
namespace Fixbi.Controllers
{
[ApiController]
[Route("api/[controller]")]
[Produces("application/json")]
public class LoginController : ControllerBase
{
private IUsuarioRepository UsuarioRepository { get; set; }
public LoginController()
37
{
UsuarioRepository = new UsuarioRepository();
}
[HttpPost]
public IActionResult Logar(LoginViewModel login)
{
try
{
Usuarios usuarioProcurado =
UsuarioRepository.BuscarPorEmailESenha(login);
if (usuarioProcurado == null)
{
return NotFound(new
{
mensagem = "Usuário ou senha encontrados"
});
}
var claims = new[]
{
new Claim(JwtRegisteredClaimNames.Email,
usuarioProcurado.EmailUsuario),
new Claim(JwtRegisteredClaimNames.Jti,
usuarioProcurado.IdUsuario.ToString()),
new Claim(ClaimTypes.Role,
usuarioProcurado.IdTipoUsuarioNavigation.TipoUsuario),
new Claim("Role",
usuarioProcurado.IdTipoUsuarioNavigation.TipoUsuario)
};
return Ok(new
{
token = new JwtSecurityTokenHandler().WriteToken(token)
});
}
catch (Exception ex)
{
return BadRequest(new
{
mensagem = "Erro: " + ex
});
}
}
}
}
Fonte: autor
Os mesmos passos são realizados para as funções Cadastrar
Atendimentos e Listar Atendimentos. Na pasta Interfaces, codificar a classe
IAtendimentoRepository.cs (Figura 24).
namespace Fixbi.Interfaces
{
public interface IAtendimentoRepository
{
void cadastrarAtendimento(Atendimentos atendimento);
List<Atendimentos> listarAtendimentos();
}
}
Fonte: autor
using Fixbi.Interfaces;
using System.Collections.Generic;
using System.Linq;
namespace Fixbi.Repositories
{
public class AtendimentoRepository : IAtendimentoRepository
{
public void cadastrarAtendimento(Atendimentos atendimento)
{
using (FixBiContext ctx = new FixBiContext())
{
ctx.Atendimentos.Add(atendimento);
ctx.SaveChanges();
}
}
public List<Atendimentos> todosAtendimentos()
{
using (FixBiContext ctx = new FixBiContext())
{
return ctx.Atendimentos.ToList();
}
}
}
}
Fonte: autor
[ApiController]
public class AtendimentosController : ControllerBase
{
private IAtendimentoRepository AtendimentoRepository { get; set; }
public AtendimentosController()
{
AtendimentoRepository = new AtendimentoRepository();
}
[HttpPost("cadastrar")]
[Authorize(Roles = "Ciclista, Mecanico")]
public IActionResult cadastrarAtendimento(Atendimentos atendimento)
{
try
{
AtendimentoRepository.cadastrarAtendimento(atendimento);
return Ok();
}
catch (Exception ex)
{
return BadRequest(new { mensagem = ex.Message });
}
}
[HttpGet("listar")]
[Authorize(Roles = "Ciclista, Mecanico")]
public IActionResult listarAtendimentos()
{
try
{
return Ok(AtendimentoRepository.todosAtendimentos());
}
catch (Exception ex)
{
return BadRequest(new { mensagem = ex.Message });
} } } }
Fonte: autor
41
Fonte: autor
42
resposta HTTP. Os mais comuns são 200 (para pedido bem-sucedido), 201 (para
solicitação bem-sucedida e dados foram criados), 204 (para resposta vazia), 400
(para pedido incorreto), 401 (para acesso não autorizado), 403 (para acesso
negado), 404 (para dados não encontrados) e 405 (para métodos não permitidos ou
solicitados), 500 (para erro interno do servidor) e 503 (para serviço indisponível)
(KETECHA, 2018).
Com a API em funcionamento, o primeiro teste no Postman é do login. No
campo body, é informando o e-mail e senha do usuário: {"email": "daniel@fixbi.com",
"senha": "12345"}. O aplicativo traz como resposta o status 200 ok, mostrando que foi
logado com sucesso obtendo-se o Token do tipo JSON Web Token (Figura 28).
Fonte: autor
aos usuários que acessem rotas, serviços e recursos das páginas web com esse
token. O JWT também pode ser usado para a transmissão de informações.
Compacto e leve, o JWT é composto por três partes separadas:
cabeçalho, carga úti e assinatura. A saída é três strings Base64-URL que podem ser
facilmente transmitidos em ambientes HTML e HTTP, sendo mais compactos quando
comparados a padrões baseados em XML, como o SAML (JSON WEB TOKENS,
2018).
Neste projeto, o token captado da API em comunicação com o banco de
dados e trazido pelo Postman é testado no site JSON Web Tokens 7. Na resposta é
possível enxergar o cabeçalho com o tipo de algoritmo (HS256) e o tipo (JWT), o
corpo com e-mail do usuário, o id de cadastro, o tipo de usuário e a regra do tipo de
usuário (Figura 29).
Figura 29 –Tela do JWT Web Tokens com teste de login da API do Fixbi
Fonte: autor
Fonte: autor
Fonte: autor
Figura: autor
Fonte: autor
49
Fonte: autor
Fonte: autor
Fonte: autor
Fonte: autor
Fonte: autor
54
Figura 39 – Tela com código do React Native no Visual Code e com dispositivo do emulador Android
Fonte:autor
Figura 40 – Código na classe “Index.js” para direcionar navegação para pastar “src”
import {AppRegistry} from 'react-native';
import Navigator from './src';
import {name as appName} from './app.json';
AppRegistry.registerComponent(appName, () => Navigator);
Fonte: autor
55
constructor(props) {
super(props);
this.state = { email: "", senha: "" }; }
render() {
return (
<View style={styles.telaLogin}>
<Image
source={require('../assets/Logo-FixBi.png')}
style={styles.imagemLogin}
/>
<Text style={styles.textoLogin}>{"Fixbi"}</Text>
<Text style={styles.textoLogin2}>{"Sua bike pronta em uma hora"}</Text>
<TextInput
style={styles.inputLogin}
placeholder="usuario@fixbi.com"
onChangeText={email => this.setState({ email })}
/>
<TextInput
style={styles.inputLogin}
placeholder="******"
secureTextEntry={true}
onChangeText={senha => this.setState({ senha })}
/>
<TouchableOpacity style={styles.botaoLogin}
onPress={this._realizarLogin}>
<Text style={styles.botaoLoginTexto}>Entrar</Text>
</TouchableOpacity>
</View>
);
}
}
telaLogin: {
flex: 1,
flexDirection: "column",
alignItems: "center",
justifyContent: "space-around",
},
57
textoLogin: {
fontSize: 45,
fontFamily: "Arial",
color: "#1E3D93",
fontWeight: 'bold',
},
textoLogin2: {
fontSize: 28,
fontFamily: "Arial",
color: "#1E3D93",
fontWeight: 'bold',
},
imagemLogin: {
height: 170,
width: 170,
},
botaoLogin: {
height: 50,
elevation: 3,
width: 300,
borderWidth: 1,
borderColor: "#1E3D93",
backgroundColor: "#1E3D93",
justifyContent: "center",
alignItems: "center",
borderRadius: 30
},
botaoLoginTexto: {
fontSize: 28,
fontFamily: "Arial",
color: "white" },
inputLogin: {
alignItems: "center",
borderWidth: 2,
borderColor: "#1E3D93",
color: "#1E3D93",
width: 300,
height: 50,
fontSize: 28,
fontFamily: "Arial",
borderRadius: 30 } });
Figura 43 – Tela da página Login no emulador Android Studio com o código da classe "singin.js"
Figura: autor
static navigationOptions = {
tabBarIcon: ({ tintColor }) => (
<Image
source={require("../assets/Logo-FixBi.png")}
style={styles.iconeNavegacaoAtendimentos}
59
/>
)
};
constructor(props) {
super(props);
this.state = {
Atendimentos: []
};
}
componentDidMount() {
this.carregarAtendimentos();
}
render() {
return (
<View style={styles.telaAtendimentos}>
<Image
source={require('../assets/Logo-FixBi.png')}
style={styles.imagemAtendimentos}
/>
<FlatList
data={this.state.Atendimentos}
keyExtractor={item => item.idAtendimento}
renderItem={this.renderizaItem}
/>
</View>
);
}
60
<Text style={styles.textoListaAtendimentos}>Ciclista:</Text>
<Text style={styles.textoListaAtendimentos}>{item.idCiclista}</Text>
<Text style={styles.textoListaAtendimentos}>Descrição:</Text>
<Text style={styles.textoListaAtendimentos}>{item.descricaoAtendimento}</Text>
<Text style={styles.textoListaAtendimentos}>Situação:</Text>
<Text style={styles.textoListaAtendimentos}>{item.situacaoAtendimento}</Text>
</View>
);
}
telaAtendimentos: {
flex: 1,
flexDirection: "column",
alignItems: "center",
justifyContent: "space-between",
},
imagemAtendimentos: {
height: 120,
width: 120,
},
textoAtendimentos: {
fontSize: 40,
fontFamily: "Arial",
alignContent: "center",
color: "#1E3D93",
},
textoListaAtendimentos: {
fontSize: 22,
fontFamily: "Arial",
color: "#1E3D93",
alignContent: "center",
61
},
iconeNavegacaoAtendimentos: {
width: 25,
height: 25,
},
});
Figura 45 – Tela da página Listar no emulador Android Studio com o código da classe "main.js"
Fonte: autor
static navigationOptions = {
tabBarIcon: ({ tintColor }) => (
<Image
source={require("../assets/profile.png")}
style={styles.iconeNavegacaoPerfil}
/>
)
};
constructor(props) {
super(props);
this.state = {
idCiclista: ""
, idMecanico: ""
, dataHorario: ""
, descricaoAtendimento: ""
, situacaoAtendimento: ""
}
}
}
buscardados = async () => {
try {
const value = await AsyncStorage.getItem("Aplicativo.Fixbi");
if (value !== null) {
this.setState({ IdUsuario: jwt(value).Id })
this.setState({ token: value })
console.warn(value);
}
} catch (error) {
63
}
componentDidMount() {
this.buscardados();
}
render() {
return (
<View style={styles.telaCadastrar}>
<Image
source={require('../assets/Logo-FixBi.png')}
style={styles.imagemCadastrar}
/>
<TextInput
style={styles.inputCadastrar}
placeholder="ID Ciclista"
onChangeText={idCiclista => this.setState({ idCiclista })}
/>
<TextInput
style={styles.inputCadastrar}
placeholder="ID Mecanico"
onChangeText={idMecanico => this.setState({ idMecanico })}
/>
<TextInput
style={styles.inputCadastrar}
placeholder="Data Horário"
onChangeText={dataHorario => this.setState({ dataHorario })}
/>
<TextInput
style={styles.inputCadastrar}
placeholder="Descrição"
onChangeText={descricaoAtendimento => this.setState({ descricaoAtendimento })}
/>
<TextInput
style={styles.inputCadastrar}
placeholder="Situação"
onChangeText={situacaoAtendimento => this.setState({ situacaoAtendimento })}
/>
64
<TouchableOpacity
style={styles.botaoCadastrar}
onPress={this.cadastrarAtendimento}
>
<Text style={styles.botaoTextoCadastrar}>Cadastrar</Text>
</TouchableOpacity>
</View>
);
}
};
telaCadastrar: {
flex: 1,
flexDirection: "column",
alignItems: "center",
justifyContent: "space-around",
},
textoCadastrar: {
fontSize: 40,
fontFamily: "Arial",
color: "#1E3D93",
},
imagemCadastrar: {
height: 120,
width: 120,
},
botaoCadastrar: {
height: 40,
elevation: 3,
width: 300,
borderWidth: 1,
borderColor: "#1E3D93",
backgroundColor: "#1E3D93",
justifyContent: "center",
alignItems: "center",
borderRadius: 30
},
botaoTextoCadastrar: {
fontSize: 25,
fontFamily: "Arial",
65
color: "white"
},
inputCadastrar: {
alignItems: "center",
borderWidth: 2,
borderColor: "#1E3D93",
color: "#1E3D93",
width: 300,
height: 50,
fontSize: 28,
fontFamily: "Arial",
borderRadius: 30
}
});
Figura 47 – Tela da página Cadastrar no emulador Android Studio com o código da classe "profile.js"
Fonte: autor
66
swipeEnabled: true,
tabBarOptions: {
showLabel: false,
showIcon: true,
inactiveBackgroundColor: "#1E3D93",
activeBackgroundColor: "#1E3D93",
activeTintColor: "#ffffff",
inactiveTintColor: "#ffffff",
style:{
height: 50
}
}
}
);
5 CONSIDERAÇÕES FINAIS
indicados dois orientadores, que nada puderam mais do que apontar algumas
incorreções referentes à formatação do relatório. Aspectos básicos também foram
negligenciados. Em nenhuma vez a rede de internet do polo Pêra Marmelo, na zona
norte da cidade de São Paulo, funcionou nas tentativas que o autor fez para se
conectar. Os equipamentos e as ferramentas usados para o acompanhamento do
curso e para a produção deste projeto foram custeados totalmente pelo próprio autor.
6 REFERÊNCIAS
APP ANNIE. Mobile hit new milestones in Q1 2019. San Francisco: 2019.
Disponível em: https://www.appannie.com/en/insights/market-data/mobile-hit-new-
milestones-in-q1-2019 (Acesso em: 20 abr. 2019)
DUCROHET, Xavier; NORBYE, Tor; CHOU, Katherine. Android Studio: An IDE built
for Android. Google. Mountain View: 2013. Disponível em: https://android-
developers.googleblog.com/2013/05/android-studio-ide-built-for-android.html (Acesso
em: 05 jul. 2019)
70
EISING, Perry. What exactly IS an API? Medium EUA: 2017. Disponível em: https://
medium.com/@perrysetgo/what-exactly-is-an-api-69f36968a41f (Acesso em: 5 jun.
2019)
FACEBOOK. Virtual Dom and Internals. Palo Alto: 2109. Disponível em:
https://reactjs.org/docs/faq-internals.html (Acesso em: 06 jul. 2019)
GIGVY. What’s the Difference between Native vs. Web vs. Hybrid Apps? EUA:
2019. Disponível em: https://getgist.com/difference-between-native-vs-web-vs-hybrid-
apps (Acesso em: 06 jul. 2019)
GIT WIKI. FAQ - General questions: what is Git? EUA: 2010. Disponível em:
https://git.wiki.kernel.org/index.php/Git_FAQ (Acesso em: 20 abr. 2019)
GITHUB. GitHub is how people build software. San Francisco: 2019. Disponível
em: https://github.com/about (Acesso em: 24 jun. 2019)
71
GSMA Intelligence. The Mobile Economy 2019. Londres: 2019. Disponível em:
https://www.gsma.com/r/mobileeconomy (Acesso em: 15 jun. 2019)
IDEO. The Field Guide to Human-Centered Design. EUA: 2009. Disponível em:
http://www.designkit.org (Acesso em: 23 abr. 2018)
JOBNINJA. A short Story about React Native. EUA: 2018. Disponível em:
https://jobninja.com/blog/short-story-react-native (Acesso em: 06 jul. 2019)
JOBS, Steve. Steve Jobs Introducing The iPhone At MacWorld 2007. Youtube.
San Francisco: 2007. Disponível em: https://www.youtube.com/watch?
v=x7qPAY9JqE4 (Acesso em 15 abr. 2019)
JSON WEB TOKENS. JWT.IO - JSON Web Tokens Introduction. Bellevue: 2018.
Disponível em: https://jwt.io/introduction (Acesso em: 20 abr. 2019)
MOBILE TIME; OPINION BOX. Uso de Apps no Brasil em 2019. São Paulo: 2019.
Disponível em: https://panoramamobiletime.com.br (Acesso em: 22 jun. 2019)
SINGH, Manish. Postman raises $50 million to grow its API development
platform. TechCrunch. Sunnyvale: 2019. Disponível em:
https://techcrunch.com/2019/06/19/postman-series-b (Acesso em: 03 jul. 2019)
SOUZA, João Nunes de. Lógica para ciência da computação e áreas afins.
Elsevier. Rio de Janeiro: 2015. Disponível em: https://www.amazon.com.br/L
%C3%B3gica-para-Ci%C3%AAncia-Computa%C3%A7%C3%A3o-Souza-ebook/dp/
B00YEWR8J6 (Acesso em: 26 jun. 2019)
SUTHERLAND, Jeff. Scrum: The Art of Doing Twice the Work in Half the Time.
Penguin Random House. Nova York: 2014. Disponível em:
https://books.google.com.br/books/about/Scrum.html?
id=ya7PBQAAQBAJ&source=kp_book_description&redir_esc=y (Acesso em: 10 fev.
2016)
TAN, Mingjie; YANG, Yongqi; YU, Ping Yu. The influence of the maker movement
on engineering and technology education. Sichuan Open University. China: 2016.
Disponível em:
http://www.wiete.com.au/journals/WTE&TE/Pages/Vol.14,%20No.1%20(2016)/14-
Tan-M.pdf (Acesso em: 20 abr. 2018)
TORVALDS, Linus. Linus Torvalds visits Google to share his thoughts on git, the
source control management system he created two years ago. YouTube. EUA:
2007. Disponível em: https://www.youtube.com/watch?v=4XpnKHJAok8&t=1m30s
(Acesso em: 05 abr. 2019)
WEISER, Mark. The Computer for the 21st Century. Cambridge: 1991. Disponível
em: https://www.ics.uci.edu/~corps/phaseii/Weiser-Computer21stCentury-SciAm.pdf
(Acesso em: 21 jun. 2019)
WORLD WIDE WEB CONSORTIUM. Relationship to the World Wide Web and
REST Architectures. Cambridge: 2004. Disponível em: https://www.w3.org/TR/2004/
NOTE-ws-arch-20040211/#relwwwrest (Acesso em: 29 jun. 2019)
WROBLEWSKI, Luke. Mobile First. A Book Apart. Estados Unidos: 2011. Disponível
em: https://www.lukew.com/resources/mobile_first.asp (Acesso em: 20 fev. 2019)