0% encontró este documento útil (0 votos)
7 vistas36 páginas

Proyecto Final: App Móvil ITLA

El documento presenta un proyecto final para la materia Introducción al desarrollo de aplicaciones móviles. El proyecto consiste en una página móvil para una empresa real que será vendida a la empresa. El código del proyecto se presenta en Dart para la creación de una aplicación móvil multiplataforma.
Derechos de autor
© All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
7 vistas36 páginas

Proyecto Final: App Móvil ITLA

El documento presenta un proyecto final para la materia Introducción al desarrollo de aplicaciones móviles. El proyecto consiste en una página móvil para una empresa real que será vendida a la empresa. El código del proyecto se presenta en Dart para la creación de una aplicación móvil multiplataforma.
Derechos de autor
© All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd

PRESENTACION

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());
}

class PageApp extends StatelessWidget {


@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Pereyra Dev',
debugShowCheckedModeBanner: false,
theme: ThemeData(
primarySwatch: [Link],
),
home: MyHomePage(),
);
}
}

class MyHomePage extends StatefulWidget {


@override
_MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage>


with SingleTickerProviderStateMixin {
late TabController _tabController;

// Usamos dynamic para poder almacenar tanto un Color como un BoxDecoration


dynamic _backgroundDecoration = BoxDecoration(
gradient: LinearGradient(
begin: [Link],
end: [Link],
colors: [
[Link],
[Link],
[Link][700]!
],
),
);

@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(),
],
),
),
)
],
),
));
}

void _launchURL(String url) async {


if (await canLaunch(url)) {
await launch(url);
} else {
throw 'No se pudo abrir $url';
}
}
}
Centralbody

import 'package:flutter/[Link]';
import 'package:trabajod/[Link]';
import 'package:trabajod/[Link]';

class Centralbody extends StatelessWidget {


const Centralbody({[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(),
],
);
}
},
);
}
}

Widget _textoCentral(BuildContext context) {


return Column(
crossAxisAlignment: [Link],
children: [
const SizedBox(height:80),
const Padding(
padding: [Link](8.0),
child: Text(
'Desarrollo De Aplicaciones & \n Asesoría En Sistemas.',
style: TextStyle(color: [Link], fontSize: 20, fontWeight:
[Link]),
),
),
const Padding(
padding: [Link](5.0),
child: Text('Brindamos soluciones tecnológicas a la medida de tus
necesidades. Para que tus proyectos sean mas fácil y rapido de realizar.',
style: TextStyle(color: [Link], fontSize: 18), textAlign:
[Link]
),
),
const SizedBox(height:10),
Row(
children: [
Padding(
padding: const [Link](5.0),
child: ElevatedButton(
style: [Link](
foregroundColor: [Link], backgroundColor:
[Link][800],
minimumSize: const Size(30, 30),
padding: const [Link](horizontal: 10),
textStyle: const TextStyle(fontSize: 10),
),
child: const Text(
'Términos y Condiciones',
style: TextStyle(fontSize: 15, fontWeight: [Link]),
),
onPressed: () {
[Link](
context,
MaterialPageRoute(builder: (context) => const Boton2()),
);
},
),
),
Padding(
padding: const [Link](5.0),
child: ElevatedButton(
style: [Link](
foregroundColor: [Link], backgroundColor:
[Link][800],
minimumSize: const Size(30, 30),
padding: const [Link](horizontal: 10),
textStyle: const TextStyle(fontSize: 10),
),
child: const Text(
'Política y Privacidad',
style: TextStyle(fontSize: 15, fontWeight: [Link]),
),
onPressed: () {
[Link](
context,
MaterialPageRoute(builder: (context) => const Boton()),
);
},
),
),
],
),
],
);
}

class ImageRigth extends StatelessWidget {


@override
Widget build(BuildContext context) {
return Expanded(
child: Container(
decoration: const BoxDecoration(
color: [Link],
image: DecorationImage(
image: AssetImage('assets/[Link]'),
fit: [Link],
),
),
),);
}
}

Boton2
import 'package:flutter/[Link]';

class Boton2 extends StatelessWidget {


const Boton2({Key? key}) : super(key: key);

@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.',
),
],

),
),
),
],
),
),
));
}
}

class Subtitle extends StatelessWidget {


final String text;

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],
),
);
}
}

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: [Link](horizontal: 10),
child: Text(
text,style: const TextStyle(color: [Link], fontSize: 18),
textAlign: [Link],
) );
}
}

Boton

import 'package:flutter/[Link]';
import 'package:trabajod/[Link]';

class Boton extends StatelessWidget {


const Boton({Key? key}) : super(key: key);

@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: 5), // Espacio entre la imagen y los párrafos


Text(
"Politica de Privacidad",
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:
'En PereyraDev, nos comprometemos a proteger su
privacidad y salvaguardar la confidencialidad de cualquier información
personal o sensible recopilada o procesada a través del uso de nuestra
aplicación. Esta Política de Privacidad describe cómo accedemos, recopilamos,
utilizamos y compartimos sus datos.'
' Al utilizar nuestra aplicación, usted acepta las
prácticas descritas en esta política.',
),
SizedBox(height: 20),
Subtitle(
text:
' Tipos de datos recopilados',
),
SizedBox(height: 10),
Paragraph(
text:
'Datos personales: Podemos recopilar y procesar los
siguientes datos personales cuando utilizan nuestra aplicación: Los tipos de
datos personales recopilados, como nombre, dirección de correo electrónico,
fecha de nacimiento, etc.',

),
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.',
),
],
),
),
),
],
),
),
));
}
}

class Paragraph extends StatelessWidget {


final String text;

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]';

class Nosotros extends StatelessWidget {


const Nosotros({
Key ? key,
}) : super(key: key);

@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]';

class Servicios extends StatelessWidget {


const Servicios({
Key ? key,
}) : super(key: key);

@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.',
),
],
),
),
);
}
}

class Paragraph extends StatelessWidget {


final String text;

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';

class Soporte extends StatelessWidget {


Soporte({Key? key}) : super(key: key);

final YoutubePlayerController _controller =


[Link](
videoId: 'e4gqLbc2kYo',
params: const YoutubePlayerParams(
showControls: true,
mute: false,
showFullscreenButton: true,
),
);

@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'),

const SizedBox(height: 15),


const Text(
'Horario de atención: 8:00 a.m. - 5:00 p.m.',
style: TextStyle(fontWeight: [Link], fontSize: 15),
textAlign: [Link],
),
const SizedBox(height: 40),
Text(
'Direccion',
style: TextStyle(
fontWeight: [Link],
fontSize: 20,
color: [Link][700],
),
textAlign: [Link],
),
const Text(
"SEDE CENTRAL: Autopista Nagua-Sanchez km.18, Cruce de Rincon,
Nagua, M.T.S, RD.",
style: TextStyle(fontWeight: [Link], fontSize: 16),
textAlign: [Link],
),
const Text(
"SUCURSAL: Calle Sanchez No.25, Nagua, M.T.S, RD.",
style: TextStyle(fontWeight: [Link], fontSize: 16),
textAlign: [Link],
),
Padding(
padding: const [Link](20.0),
child: Row(
mainAxisAlignment: [Link],
children: [
const Icon(
Icons.email_outlined,
size: 30,
),
Text(
'sisloanrd@[Link]',
style: TextStyle(
fontSize: 16,
fontWeight: [Link],
color: [Link][900],
),
),
],
),
),
const Padding(padding: [Link](top: 5)),
const Divider(color: [Link]),
const SizedBox(height: 40),
const Text(
"Tutorial",
style: TextStyle(fontWeight: [Link], fontSize: 18),
textAlign: [Link],
),
SizedBox(
width: [Link](context).[Link] / 2,
child: YoutubePlayer(
controller: _controller,
aspectRatio: 16 / 9,
),
),
const SizedBox(height: 20),
],
),
),
);
}

// Método para construir el widget que contiene el ícono del teléfono y el


texto del nombre y el número de teléfono
Widget _buildIconText(String name, String phone) {
return Column(
children: [
Icon([Link], color: [Link][700], size: 40),
Text(
'$name\n$phone',
style: const TextStyle(fontSize: 18, fontWeight: [Link]),
textAlign: [Link], // Centrar el texto
),
],
);
}
}

Resultado

También podría gustarte