Files
prosappweb/lib/ui/layouts/dashboard/dashboard_layout.dart
T
Lizandro GuarnizoandClaude Sonnet 4.6 15175c1b91 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>
2026-06-18 15:26:32 -05:00

86 lines
2.5 KiB
Dart

import 'package:prosapp_web_app/providers/sidemenu_provider.dart';
import 'package:prosapp_web_app/ui/shared/navbar.dart';
import 'package:prosapp_web_app/ui/shared/sidebar.dart';
import 'package:flutter/material.dart';
class DashboardLayout extends StatefulWidget {
final Widget child;
const DashboardLayout({super.key, required this.child});
@override
State<DashboardLayout> createState() => _DashboardLayoutState();
}
class _DashboardLayoutState extends State<DashboardLayout>
with SingleTickerProviderStateMixin {
@override
void initState() {
super.initState();
SideMenuProvider.menuController = AnimationController(
vsync: this,
duration: const Duration(milliseconds: 300),
);
}
@override
Widget build(BuildContext context) {
final size = MediaQuery.of(context).size;
return Scaffold(
backgroundColor: const Color(0xffEDF1F2),
body: Stack(
children: [
Row(
children: [
if (size.width >= 700) const Sidebar(),
Expanded(
child: Column(
children: [
// Navbar
const Navbar(),
// View
Expanded(
child: Padding(
padding: const EdgeInsets.symmetric(
horizontal: 20,
vertical: 10,
),
child: widget.child,
),
),
],
),
)
],
),
if (size.width < 700)
AnimatedBuilder(
animation: SideMenuProvider.menuController,
builder: (context, _) => Stack(
children: [
if (SideMenuProvider.isOpen)
Opacity(
opacity: SideMenuProvider.opacity.value,
child: GestureDetector(
onTap: () => SideMenuProvider.closeMenu(),
child: Container(
width: size.width,
height: size.height,
color: Colors.black26,
),
),
),
Transform.translate(
offset: Offset(SideMenuProvider.movement.value, 0),
child: const Sidebar(),
),
],
),
),
],
),
);
}
}