Flutter Business Control Panel App (Invoice, POS, Stock, Attendance)
Demo :
Click Video πππ
π FEATURES SECTION
-
Modern Business Dashboard
-
Invoice & POS System
-
Stock & Inventory Control
-
Employee Attendance
-
Dark Professional UI
-
Single File Flutter Project
Code :
import 'package:flutter/material.dart';
void main() {
runApp(const BusinessApp());
}
class BusinessApp extends StatelessWidget {
const BusinessApp({super.key});
@override
Widget build(BuildContext context) {
return MaterialApp(
debugShowCheckedModeBanner: false,
title: 'Business Control Panel',
theme: ThemeData.dark().copyWith(
scaffoldBackgroundColor: const Color(0xFF0B0F1A),
),
home: const DashboardScreen(),
);
}
}
class DashboardScreen extends StatelessWidget {
const DashboardScreen({super.key});
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
elevation: 0,
backgroundColor: Colors.transparent,
centerTitle: true,
title: const Text(
'Business Control Panel',
style: TextStyle(fontWeight: FontWeight.bold),
),
),
body: SingleChildScrollView(
padding: const EdgeInsets.all(16),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
_buildHeader(),
const SizedBox(height: 20),
_buildStatsGrid(),
const SizedBox(height: 20),
_buildQuickActions(),
const SizedBox(height: 20),
_buildActivityLog(),
],
),
),
);
}
// ================= HEADER =================
Widget _buildHeader() {
return Container(
padding: const EdgeInsets.all(20),
decoration: BoxDecoration(
gradient: const LinearGradient(
colors: [Color(0xFF6A5AE0), Color(0xFF00C6FF)],
),
borderRadius: BorderRadius.circular(16),
),
child: Row(
children: [
const Icon(Icons.business_center, size: 40),
const SizedBox(width: 12),
Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
const Text(
"Welcome, Admin",
style: TextStyle(fontSize: 18, fontWeight: FontWeight.bold),
),
Text(
"Enterprise Business Overview",
style: TextStyle(
fontSize: 13,
color: Colors.white.withOpacity(0.9),
),
),
],
)
],
),
);
}
// ================= STATS GRID =================
Widget _buildStatsGrid() {
return GridView.count(
crossAxisCount: 2,
shrinkWrap: true,
physics: const NeverScrollableScrollPhysics(),
mainAxisSpacing: 12,
crossAxisSpacing: 12,
children: const [
_StatCard(
title: "Total Sales",
value: "₹ 1,25,000",
icon: Icons.receipt_long,
color: Colors.greenAccent,
),
_StatCard(
title: "Invoices",
value: "342",
icon: Icons.description,
color: Colors.orangeAccent,
),
_StatCard(
title: "Stock Items",
value: "128",
icon: Icons.inventory_2,
color: Colors.cyanAccent,
),
_StatCard(
title: "Employees",
value: "24",
icon: Icons.people_alt,
color: Colors.purpleAccent,
),
],
);
}
// ================= QUICK ACTIONS =================
Widget _buildQuickActions() {
return Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
const Text(
"Quick Actions",
style: TextStyle(fontSize: 18, fontWeight: FontWeight.bold),
),
const SizedBox(height: 12),
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: const [
_ActionButton(icon: Icons.add_chart, label: "Invoice"),
_ActionButton(icon: Icons.point_of_sale, label: "POS"),
_ActionButton(icon: Icons.inventory, label: "Stock"),
_ActionButton(icon: Icons.fact_check, label: "Attendance"),
],
)
],
);
}
// ================= ACTIVITY LOG =================
Widget _buildActivityLog() {
return Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
const Text(
"Recent Activity",
style: TextStyle(fontSize: 18, fontWeight: FontWeight.bold),
),
const SizedBox(height: 10),
_activityTile("Invoice #INV-342 generated", Icons.receipt),
_activityTile("Stock updated (Laptop)", Icons.inventory),
_activityTile("Employee marked present", Icons.check_circle),
],
);
}
Widget _activityTile(String text, IconData icon) {
return Container(
margin: const EdgeInsets.only(bottom: 8),
padding: const EdgeInsets.all(12),
decoration: BoxDecoration(
color: const Color(0xFF141A2E),
borderRadius: BorderRadius.circular(12),
),
child: Row(
children: [
Icon(icon, size: 20, color: Colors.blueAccent),
const SizedBox(width: 10),
Expanded(
child: Text(text, style: const TextStyle(fontSize: 14)),
)
],
),
);
}
}
// ================= COMPONENTS =================
class _StatCard extends StatelessWidget {
final String title;
final String value;
final IconData icon;
final Color color;
const _StatCard({
required this.title,
required this.value,
required this.icon,
required this.color,
});
@override
Widget build(BuildContext context) {
return Container(
padding: const EdgeInsets.all(16),
decoration: BoxDecoration(
color: const Color(0xFF141A2E),
borderRadius: BorderRadius.circular(16),
),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Icon(icon, color: color, size: 28),
const Spacer(),
Text(
value,
style: const TextStyle(fontSize: 20, fontWeight: FontWeight.bold),
),
Text(
title,
style: TextStyle(
fontSize: 13,
color: Colors.white.withOpacity(0.7),
),
),
],
),
);
}
}
class _ActionButton extends StatelessWidget {
final IconData icon;
final String label;
const _ActionButton({
required this.icon,
required this.label,
});
@override
Widget build(BuildContext context) {
return Column(
children: [
Container(
width: 60,
height: 60,
decoration: BoxDecoration(
gradient: const LinearGradient(
colors: [Color(0xFF00C6FF), Color(0xFF6A5AE0)],
),
borderRadius: BorderRadius.circular(16),
),
child: Icon(icon, size: 28),
),
const SizedBox(height: 6),
Text(label, style: const TextStyle(fontSize: 12))
],
);
}
}
Comments
Post a Comment