Proyecto Final: App Móvil ITLA
Proyecto Final: App Móvil ITLA
NOMBRE
Dannery Hernandez Moreno
MATRICULA
2021-2271
PERIODO
C1-2024
MATERIA
Introducción al desarrollo de aplicaciones móviles
TEMA
Proyecto Final
MAESTRO
Freidy Nuñez Perez
LINK VIDEO
INSTITUCION
Instituto Tecnologico De Las Americas (ITLA)
FECHA DE ENTREGA
12-04-2024
Mi proyecto final fue de manera individual y se basa en una página móvil que da información de
una empresa, la empresa es real, y se la venderé a dicha empresa, el próximo mes. Creo que
le haré algunos cambios, según la respuesta del cliente y también creo que sere contratada.
Gracias maestro por los conocimientos aprendidos.
Codigo
import 'package:flutter/[Link]';
import 'package:url_launcher/url_launcher.dart';
import 'package:trabajod/Nosotros/[Link]';
import 'package:trabajod/[Link]';
import 'package:trabajod/sopor/[Link]';
import 'servicios/[Link]';
void main() {
runApp(PageApp());
}
@override
void initState() {
[Link]();
_tabController = TabController(length: 4, vsync: this);
_tabController.addListener(() {
if (!_tabController.indexIsChanging) {
setState(() {
if (_tabController.index == 0) {
// Gradiente para "Inicio"
_backgroundDecoration = BoxDecoration(
gradient: LinearGradient(
begin: [Link],
end: [Link],
colors: [
[Link],
[Link],
[Link][700]!
],
),
);
} else {
// Colores sólidos para otros tabs
List<Color> colors;
switch (_tabController.index) {
case 1:
colors = [
[Link],
[Link][700]!
]; // Color para "Nosotros"
break;
case 2:
colors = [
[Link],
[Link][700]!
]; // Color para "Servicios"
break;
case 3:
colors = [
[Link],
[Link][700]!
]; // Color para "Soporte"
break;
default:
colors = [[Link], [Link][700]!];
}
_backgroundDecoration = BoxDecoration(
gradient: LinearGradient(
begin: [Link],
end: [Link],
colors: colors,
),
);
}
});
}
});
}
@override
void dispose() {
_tabController.dispose();
[Link]();
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: Container(
// Aplicamos la decoración que puede ser un gradiente o un color
sólido
decoration: _backgroundDecoration is BoxDecoration
? _backgroundDecoration
: BoxDecoration(color: _backgroundDecoration),
// El color de fondo actualizado
child: CustomScrollView(
slivers: [
SliverAppBar(
actions: [
GestureDetector(
onTap: () {
_launchURL("[Link]
},
child: Container(
color: [Link],
margin: [Link](top:30, right: 10),
height: 50,
width: 150,
child: Text('Ir a Sisloan',
style: TextStyle(
color: [Link][900],
fontSize: 18, fontWeight: [Link],
),
),
),
) ],
flexibleSpace: FlexibleSpaceBar(
title: Row(
children: [
[Link](
'assets/[Link]',
fit: [Link],
width: 95,
height: 95,
),
],
),
centerTitle: false,
titlePadding: const [Link](left: 20, bottom: 40),
collapseMode: [Link],
),
backgroundColor: [Link],
expandedHeight: 200,
),
SliverToBoxAdapter(
child: Column(
children: <Widget>[
TabBar(
controller: _tabController,
labelStyle: const TextStyle(
fontSize: 15.0, // Tamaño de fuente
fontWeight: [Link], // Grosor de la fuente
),
unselectedLabelStyle: const TextStyle(
fontSize: 17.0,
// Tamaño de fuente para pestañas no seleccionadas
fontWeight: FontWeight
.bold, // Grosor de la fuente para pestañas no
seleccionadas
),
labelColor: [Link],
// Color del texto de la pestaña seleccionada
unselectedLabelColor: [Link][800],
// Color del texto de las pestañas no seleccionadas
indicatorColor: [Link],
// Color de la línea indicadora
tabs: const [
Tab(
text: 'Inicio',
),
Tab(text: 'Nosotros'),
Tab(text: 'Servicios'),
Tab(text: 'Soporte'),
],
),
],
),
),
const SliverToBoxAdapter(
child: SizedBox(
height: 20,
),
),
SliverToBoxAdapter(
child: SizedBox(
height: MediaQuery
.of(context)
.size
.height - 200,
child: TabBarView(
controller: _tabController,
children: [
Centralbody(),
Nosotros(),
Servicios(),
Soporte(),
],
),
),
)
],
),
));
}
import 'package:flutter/[Link]';
import 'package:trabajod/[Link]';
import 'package:trabajod/[Link]';
@override
Widget build(BuildContext context) {
return LayoutBuilder(
builder: (context, constraints) {
if ([Link] < 600) {
// Si el ancho de la pantalla es menor que 600, coloca la imagen
debajo de los botones.
return Column(
crossAxisAlignment: [Link],
children: [
_textoCentral(context),
const SizedBox(height: 20),
ImageRigth(),
],
);
} else {
// Si el ancho de la pantalla es mayor o igual a 600, coloca la
imagen a la derecha de los textos y botones.
return Row(
mainAxisAlignment: [Link],
children: [
_textoCentral(context),
ImageRigth(),
],
);
}
},
);
}
}
Boton2
import 'package:flutter/[Link]';
@override
Widget build(BuildContext context){
return Scaffold (
body: SingleChildScrollView(
child: Container(
decoration: BoxDecoration(
gradient: LinearGradient(
begin: [Link],
end: [Link],
colors: [[Link], [Link][700]!]
)),
child: Column(
children: [
Padding(
padding: [Link](top: 3.0, bottom: 50.0),
child: Row(
mainAxisAlignment: [Link],
children: [
IconButton(
icon: Icon(Icons.arrow_back),
color: [Link][800],
onPressed: () {
[Link](context).pop(context); // Retroceder a la página
anterior
},
),
Padding(
padding: const [Link](19.0),
child: [Link]('assets/[Link]', width: 110,
height: 110, fit: [Link],),
),
Padding(
padding: const [Link](left: 5.0, top: 1.0),
child: Text("App SisLOAN", style: TextStyle(color:
[Link][800], fontWeight: [Link], fontSize: 23)
),
),
],
),
),
Row(
mainAxisAlignment: [Link],
children: [
Padding(
padding: const [Link]( top: 5.0, ),
child: [Link]('assets/[Link]', width: 95, height:
95, fit: [Link],),
),
],
),
SizedBox(height: 5), // Espacio entre la imagen y los párrafos
Text(
"Terminos y Condiciones",
style: TextStyle(color: [Link][800], fontSize: 25, fontWeight:
[Link]
),
),
SingleChildScrollView(
child: Container(
padding: const [Link](
vertical: 10,
horizontal: 10,
),
child: const Column(
crossAxisAlignment: [Link],
children: [
SizedBox(height: 20),
Paragraph(
text:
'Los siguientes términos y condiciones rigen el uso del
servicio "Sisloan". Al utilizar el Servicio, usted acepta estos términos y
condiciones en su totalidad.'
' Si no está de acuerdo con estos términos, '
'por favor, absténgase de utilizar el Servicio. ',
),
SizedBox(height: 20),
Subtitle(
text:
' Uso del Servicio',
),
SizedBox(height: 10),
Paragraph(
text:
'Licencia de Uso: PereyraDev le otorga una licencia personal,
no transferible y no exclusiva para utilizar el "Servicio Sisloan" para sus
propios fines no comerciales. Queda prohibido cualquier uso comercial o la
distribución del servicio sin el'
' consentimiento expreso por escrito de PereyraDev. ',
),
SizedBox(height: 10),
Paragraph(
text:
'Restricciones: Usted acepta no descompilar, realizar
ingeniería inversa, modificar, copiar, distribuir, transmitir, mostrar,
ejecutar, reproducir, publicar, otorgar licencias, crear trabajos derivados,
transferir o vender cualquier información, software, productos o servicios
obtenidos'
' del servicio sin el consentimiento previo '
'por escrito de PereyraDev. ',
),
SizedBox(height: 20),
Subtitle(
text:
' Privacidad y Seguridad',
),
SizedBox(height: 10),
Paragraph(
text:
'Protección de Datos: Al utilizar el servicio, puede
proporcionarnos ciertos datos personales. Guardamos su privacidad y nos '
'comprometemos a proteger sus datos de acuerdo con nuestra
política de privacidad. Al aceptar estos términos, también acepta nuestra'
' Política de Privacidad.',
),
SizedBox(height: 10),
Paragraph(
text:
'Uso aceptable: Usted se compromete a utilizar nuestros
servicios de manera adecuada y legal. '
'No está permitido utilizar nuestros servicios para fines
ilícitos, difamatorios, ofensivos o que violen los derechos de terceros. Nos
reservamos el derecho de suspender o cancelar'
' su acceso a nuestros servicios si se determina que '
'está violando estos términos.',
),
SizedBox(height: 10),
Paragraph(
text:
'Cuentas de usuario: Al crear una cuenta con nosotros, usted es
responsable de mantener la confidencialidad de sus credenciales de inicio de
sesión y de todas las actividades que ocurran bajo su cuenta. '
'Informe cualquier uso no autorizado de su cuenta de
inmediato.',
),
SizedBox(height: 20),
Subtitle(
text:
' Contenido del Usuario',
),
SizedBox(height: 10),
Paragraph(
text: 'Responsabilidad del Usuario: Usted es responsable de
cualquier contenido que proporcione o transmita a través del servicio.
Asegúrese de que el contenido que proporcione cumpla con todas las leyes y '
'no vulnerar los derechos de terceros.'
),
SizedBox(height: 10),
Paragraph(
text: 'Derechos de PereyraDev: Al proporcionar contenido a
través del servicio, usted otorga a PereyraDev una licencia mundial, no
exclusiva, '
'irrevocable, perpetua, transferible y sublicenciable para
utilizar y procesar dicho contenido para fines relacionados con el servicio y
el negocio de PereyraDev.'
),
SizedBox(height: 20),
Subtitle(
text: ' Disposiciones Generales',
),
SizedBox(height: 10),
Paragraph(
text: ' Legislación Aplicable: Estos términos y condiciones
se rigen por las leyes de [país/estado]. Cualquier disputa que surja en
relación con el servicio estará sujeta a la'
' juridicción exclusiva de los tribunales de
[ciudad/país].'
),
SizedBox(height: 10),
Paragraph(
text: 'Divisibilidad: Si alguna disposición de estos términos y
condiciones se considera inválida o inaplicable, '
'las demás disposiciones seguirán siendo válidas y
aplicables.'
),
SizedBox(height: 20),
Subtitle(
text: ' ¡IMPORTANTE!',
),
SizedBox(height: 10),
Paragraph(
text: 'Le recomendamos que lea detenidamente estos términos y
condiciones antes de utilizar el "Servicio Sisloan". Si tienes alguna pregunta
o inquietud, no dude en '
' en comunicarse con nosotros a través del SOPORTE. Al
utilizar el Servicio, usted acepta estos términos y condiciones en su
totalidad. Gracias por utilizar el Servicio Sisloan de PereyraDev.',
),
],
),
),
),
],
),
),
));
}
}
const Subtitle({
Key? key,
required [Link],
}) : super(key: key);
@override
Widget build(BuildContext context) {
return Text(
text,
style: TextStyle(
color: [Link][800],
fontSize: 19,
fontWeight: [Link],
),
);
}
}
const Paragraph({
Key? key,
required [Link],
[Link] = false,
}) : super(key: key);
@override
Widget build(BuildContext context) {
return Padding(
padding: [Link](horizontal: 10),
child: Text(
text,style: const TextStyle(color: [Link], fontSize: 18),
textAlign: [Link],
) );
}
}
Boton
import 'package:flutter/[Link]';
import 'package:trabajod/[Link]';
@override
Widget build(BuildContext context) {
return Scaffold(
body: SingleChildScrollView(
child: Container(
decoration: BoxDecoration(
gradient: LinearGradient(
begin: [Link],
end: [Link],
colors: [[Link], [Link][700]!],
),
),
child: Column(
children: [
Padding(
padding: [Link](top: 10.0, bottom: 50.0),
child: Row(
mainAxisAlignment: [Link],
children: [
IconButton(
icon: Icon(Icons.arrow_back),
color: [Link][800],
onPressed: () {
[Link](context).pop(
context); // Retroceder a la página anterior
},
),
Padding(
padding: const [Link](top: 19.0),
child: [Link]('assets/[Link]', width: 110,
height: 110,
fit: [Link],),
),
Padding(
padding: const [Link](left: 5.0, top: 20.0),
child: Text("App SisLOAN", style: TextStyle(
color: [Link][800],
fontWeight: [Link],
fontSize: 23)
),
),
],
),
),
),
SizedBox(height: 10),
Paragraph(
text:
'Datos sensibles: Reconocemos la sensibilidad de cierta
información y nos comprometemos a manejar dichos datos con el máximo cuidado.
Nuestra aplicación no recopila intencionalmente datos sensibles. Si usted
proporciona voluntariamente datos sensibles al utilizar la aplicación,tenga en
cuenta que trataremos estos datos con el más alto nivel de confidencialidad y
cumpliremos con las leyes de protección de datos correspondientes.',
),
SizedBox(height: 20),
Subtitle(
text:
' Uso de Datos',
),
SizedBox(height: 10),
Paragraph(
text:
'Utilizamos los datos recopilados con los siguientes
fines:',
),
SizedBox(height: 9),
Paragraph(
text:
'Para proporcionar y mantener la funcionalidad de
nuestra aplicación.'
),
SizedBox(height: 9),
Paragraph(
text:
'Personalizar su experiencia con la aplicación.',
),
SizedBox(height: 9),
Paragraph(
text:
'Procesar sus solicitudes, consultas o transacciones.',
),
SizedBox(height: 9),
Paragraph(
text:
'Mejorar nuestra aplicación y mejorar la experiencia
del usuario.',
),
SizedBox(height: 9),
Paragraph(
text:
'Para comunicarnos con usted sobre actualizaciones,
promociones o información importante relacionada con la aplicación.',
),
SizedBox(height: 9),
Paragraph(
text:
'Analizar el uso de la aplicación y las tendencias con
fines de investigación y marketing.',
),
SizedBox(height: 20),
Subtitle(
text:
' Compartir Datos',
),
SizedBox(height: 10),
Paragraph(
text:
'Proveedores De Servicios De Terceros: Podemos
compartir sus datos personales con proveedores de servicios de terceros que
nos ayuden a operar la aplicación, proporcionar servicios o llevar a cabo
nuestro negocio. '
'Estos proveedores de servicios deben cumplir con
estrictos estándares de protección de datos.',
),
SizedBox(height: 10),
Paragraph(
text:
'Requisitos Legales: Podemos divulgar sus datos
personales si así lo exige la ley, regulación, proceso legal o solicitud
gubernamental.',
),
SizedBox(height: 10),
Paragraph(
text:'Transferencias Comerciales: En caso de fusión,
adquisición o venta de la totalidad o parte de los activos de PereyraDev, es
posible que sus datos personales se transfieran como parte de la transacción.'
),
SizedBox(height: 20),
Subtitle(
text:
' Seguridad de Datos',
),
SizedBox(height: 10),
Paragraph(
text: 'Nos esforzamos por proteger sus datos,
implementamos medidas técnicas y organizativas apropiadas para proteger sus
datos personales y sensibles de accesos, divulgaciones, alteraciones o
destrucciones no autorizadas.',
),
SizedBox(height: 20),
Subtitle(
text:' Retención Y Eliminación De Datos'
),
SizedBox(height: 10),
Paragraph(
text:"Conservamos sus datos personales solo durante
el tiempo necesario para cumplir con los fines descritos en esta Política de
Privacidad o según lo requiera la ley. Cuando sus datos ya no sean necesarios,
los eliminaremos o anonimizaremos de forma segura."
),
SizedBox(height: 20),
Subtitle(
text:' Privacidad De Los Niños'
),
SizedBox(height: 10),
Paragraph(
text: 'Nuestra aplicación no está destinada al uso de
niños menores de 13 años. No recopilamos intencionalmente datos personales de
niños menores de 13 años. Si nos damos cuenta de que hemos recopilado datos de
manera inadvertida de un niño menor de 13 años, '
'tomaremos medidas para eliminar la información lo
antes posible.',
),
SizedBox(height: 20),
Subtitle(
text: ' Cambios En La Política De Privacidad',
),
SizedBox(height: 10),
Paragraph(
text: 'Podemos actualizar esta Política de Privacidad
de vez en cuando para reflejar cambios en nuestras prácticas u otras razones
operativas, legales o regulatorias. Le notificaremos cualquier cambio
importante publicando la Política de Privacidad revisada en nuestra aplicación
u a través de otros canales de comunicación.'
),
SizedBox(height: 20),
Subtitle(
text:' ¡INQUIETUDES!',
),
SizedBox(height: 10),
Paragraph(
text: 'Si tiene alguna pregunta, inquietud o
solicitud con respecto a esta política de privacidad o las prácticas de datos
de PereyraDev, contáctenos a través del SOPORTE.',
),
SizedBox(height: 10),
Paragraph(
text:'En PereyraDev, valoramos su privacidad y nos
esforzamos por brindarle una experiencia de aplicación segura y agradable. Le
recomendamos que revise esta política de privacidad regularmente para
mantenerse informado/a sobre cómo protegemos su privacidad.',
),
],
),
),
),
],
),
),
));
}
}
const Paragraph({
Key? key,
required [Link],
}) : super(key: key);
@override
Widget build(BuildContext context) {
return Padding(
padding: [Link](horizontal: 10),
child: Text(
text,style: const TextStyle(color: [Link], fontSize: 18),
textAlign: [Link],
) );
}
}
Nosotros
import 'package:flutter/[Link]';
@override
Widget build(BuildContext context) {
return SingleChildScrollView(
child: Container(
padding: const [Link](
vertical: 10,
horizontal: 10,
),
child: const Column(
crossAxisAlignment: [Link],
children: [
Paragraph(
text: 'Bienvenido a Pereyra Dev. Nos enorgullece ser una empresa
dedicada en el desarrollo de aplicaciones y asesoria en el sistema. Nos
dedicamos a ofrecer soluciones '
'digitales de vanguardia que satisfacen las necesidades
cambiantes de nuestros clientes. Nuestro equipo de expertos'
' en tecnología está comprometido con la excelencia y la
innovación.',
),
SizedBox(height: 15),
Paragraph(
text:
'Una de nuestras principales creaciones es SisLOAN, una
aplicación que significa control, seguridad y confianza, por el cual brinda
procesos de préstamos . Diseñada con el usuario en mente,'
' SisLoan ofrece una plataforma intuitiva y segura para
solicitar y gestionar préstamos de rutas de manera eficiente.',
),
SizedBox(height: 20),
Paragraph(
text:
'Características Principales de SisLOAN:',
isBold: true,
),
SizedBox(height: 15),
Paragraph(
text:
'Sistema de Préstamos: SisLoan ofrece un sistema flexible de
préstamos que permite a los usuarios'
' acceder a'
' financiamiento cuando lo necesiten, con la conveniencia de
pagos mensuales, semanales, diarios y quincenal.',
),
SizedBox(height: 15),
Paragraph(
text:
'Interfaz Intuitiva: Nuestra aplicación presenta una interfaz
fácil de usar que guía '
'a los usuarios a través del proceso de solicitud de
préstamos y les brinda una experiencia sin complicaciones',
),
SizedBox(height: 15),
Paragraph(
text:
' Seguridad de Datos: En PereyraDev, entendemos la importancia de
la seguridad de los datos financieros. Por eso, '
'implementamos medidas de seguridad avanzadas para proteger
la información confidencial de nuestros usuarios.',
),
SizedBox(height: 15),
Paragraph(
text:
' Soporte Personalizado: Nuestro equipo de soporte está siempre
disponible para atender las consultas y preocupaciones de'
' nuestros usuarios, brindando asistencia personalizada en
cada paso del camino.',
),
SizedBox(height: 15),
Paragraph(
text:
'En PereyraDev, nos comprometemos a seguir impulsando la
innovación y ofreciendo creaciones y soluciones tecnológicas de calidad. Con
SisLoan y '
'otras emocionantes creaciones en nuestro portafolio, estamos
construyendo un futuro '
'digital más accesible para nuestros clientes.',
),
],
),
),
);
}
}
class Paragraph extends StatelessWidget {
final String text;
final bool isBold;
const Paragraph({
Key? key,
required [Link],
[Link] = false,
}) : super(key: key);
@override
Widget build(BuildContext context) {
return Padding(
padding: const [Link](horizontal: 10),
child: Text(
text,style: TextStyle(color: [Link], fontSize: 18,
fontWeight: isBold ? [Link] : [Link],
),
textAlign: [Link],
));
}
}
Servicios
import 'package:flutter/[Link]';
@override
Widget build(BuildContext context) {
return SingleChildScrollView(
child: Container(
padding: const [Link](
vertical: 10,
horizontal: 10,
),
child: const Column(
crossAxisAlignment: [Link],
children: [
Paragraph(
text:
'[Link], Dedicada al desarrollo de aplicaciones,
especializada en un sistema como Sisloan (sistema de ruta de préstamos),
ofrecemos una variedad de servicios complementarios que integren valor '
'tanto al sistema como a la experiencia del cliente.',
),
SizedBox(height: 15),
Paragraph(
text:
'Ofrecemos servicios de desarrollo de aplicaciones personalizadas
para empresas que necesiten soluciones específicas. Esto puede incluir
aplicaciones móviles, '
'web o de escritorio según las necesidades del cliente.',
),
SizedBox(height: 15),
Paragraph(
text:
'Proporcionamos consultoría y asesoramiento a empresas que estén
buscando desarrollar sus propias aplicaciones. Esto podría abarcar desde la
planificación inicial hasta'
' la implementación y mantenimiento continuo.',
),
SizedBox(height: 15),
Paragraph(
text:
'Ofrecemos servicios de implementación y personalización de
Sisloan para empresas que deseen utilizarlo como parte de su sistema de
gestión de préstamos. Esto puede incluir la integración con otros sistemas
existentes y '
'la personalización según las necesidades del cliente.',
),
SizedBox(height: 15),
Paragraph(
text:
'Brindamos servicios de soporte técnico y mantenimiento continuo
para'
' garantizar que las aplicaciones desarrolladas funcionen sin
problemas y estén actualizadas con '
'las últimas tecnologías y requisitos de seguridad.',
),
SizedBox(height: 15),
Paragraph(
text:
'Ofrecemos programas de formación y capacitación para los'
' usuarios finales de las aplicaciones desarrolladas, así
como para el personal'
' interno de las empresas que las utilizan.',
),
SizedBox(height: 15),
Paragraph(
text:
'Como estrategia de marketing, ofrecemos '
'el primer mes gratis de uso de las aplicaciones
desarrolladas como incentivo para nuevos clientes. '
'Implementamos un modelo de pago mensual por el uso de las
aplicaciones desarrolladas, lo que facilita la adopción para empresas de
diferentes tamaños y presupuestos.',
),
SizedBox(height: 15),
Paragraph(
text:
'Nos comprométemos a proporcionar actualizaciones regulares y
nuevas características para las aplicaciones desarrolladas, manteniéndolas
siempre actualizadas y relevantes para las necesidades cambiantes del mercado
y sugerencias de nuestros '
'clientes.',
),
],
),
),
);
}
}
const Paragraph({
Key? key,
required [Link],
}) : super(key: key);
@override
Widget build(BuildContext context) {
return Padding(
padding: [Link](horizontal: 10),
child: Text(
text,style: const TextStyle(color: [Link], fontSize: 18,
fontWeight: [Link],
),
textAlign: [Link],
));}
}
Soporte
import 'package:flutter/[Link]';
import 'package:flutter/[Link]';
import 'package:flutter/[Link]';
import 'package:youtube_player_iframe/youtube_player_iframe.dart';
@override
Widget build(BuildContext context) {
return SingleChildScrollView(
child: Padding(
padding: const [Link](30.0),
child: Column(
children: [
[Link](
'assets/[Link]',
height: 120,
),
const Text(
'Control, Seguridad y Confianza',
style: TextStyle(
fontSize: 20,
fontWeight: [Link],
),
textAlign: [Link],
),
const SizedBox(height: 30),
Text(
'Para mayor información, por favor '
'contacte a nuestro equipo de soporte técnico de Pereyra
Dev.',
style: TextStyle(
fontWeight: [Link],
fontSize: 15,
color: [Link][700],
),
textAlign: [Link],
),
const SizedBox(height: 30),
Row(
mainAxisAlignment: [Link],
children: [
_buildIconText('Christian Garcia', '(829)-437-4679'),
_buildIconText('Daniela Almanzar', '(829)-437-6516'),
],
),
const SizedBox(height: 10),
_buildIconText('Carlos Osoria', '(829)-437-4731'),
Resultado