replace: swap prosappweb content for prosapp_web_app (more complete version)

prosapp_web_app has chat, dashboard, calendar, support, 13 providers and
Fluro URL routing. Keep Dockerfile + nginx.conf from previous prosappweb.
Upgrade google_fonts 6.2.1 → 8.1.0 (Dart 3.12 compat fix).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Lizandro Guarnizo
2026-06-18 15:26:32 -05:00
co-authored by Claude Sonnet 4.6
parent 74a4f41902
commit 15175c1b91
334 changed files with 12914 additions and 25727 deletions
@@ -0,0 +1,46 @@
import 'package:flutter/material.dart';
class CustomOutlinedButton extends StatelessWidget {
final Function onPressed;
final String text;
final Color color;
final bool isFilled;
const CustomOutlinedButton({
super.key,
required this.onPressed,
required this.text,
this.color = Colors.blue,
this.isFilled = false,
});
@override
Widget build(BuildContext context) {
return OutlinedButton(
style: ButtonStyle(
shape: WidgetStateProperty.all(
RoundedRectangleBorder(
borderRadius: BorderRadius.circular(30),
),
),
side: WidgetStateProperty.all(
BorderSide(color: color),
),
backgroundColor: WidgetStateProperty.all(
isFilled ? color.withOpacity(0.3) : Colors.transparent,
),
),
onPressed: () => onPressed(),
child: Padding(
padding: const EdgeInsets.symmetric(horizontal: 20, vertical: 10),
child: Text(
text,
style: const TextStyle(
fontSize: 16,
color: Colors.blue,
),
),
),
);
}
}
+40
View File
@@ -0,0 +1,40 @@
import 'package:flutter/material.dart';
class LinkText extends StatefulWidget {
final String text;
final Function()? onPressed;
const LinkText({super.key, required this.text, this.onPressed});
@override
State<LinkText> createState() => _LinkTextState();
}
class _LinkTextState extends State<LinkText> {
bool isHover = false;
@override
Widget build(BuildContext context) {
return GestureDetector(
onTap: () {
if (widget.onPressed != null) widget.onPressed!();
},
child: MouseRegion(
cursor: SystemMouseCursors.click,
onEnter: (_) => setState(() => isHover = true),
onExit: (_) => setState(() => isHover = false),
child: Container(
margin: const EdgeInsets.symmetric(vertical: 5, horizontal: 10),
child: Text(
widget.text,
style: TextStyle(
fontSize: 16,
color: Colors.grey[700],
decoration: isHover ? TextDecoration.underline : null,
),
),
),
),
);
}
}