initialized Dashboard Page

This commit is contained in:
Mohammad Salameh
2024-02-20 12:08:59 +03:00
parent 0c390a8062
commit d27063f149
98 changed files with 1704 additions and 824 deletions

View File

@ -0,0 +1,99 @@
import 'package:flutter/material.dart';
import 'package:flutter_svg/flutter_svg.dart';
import 'package:gap/gap.dart';
import 'package:syncrow_app/features/dashboard/view/card_title.dart';
import 'package:syncrow_app/features/shared_widgets/text_widgets/body_small.dart';
import 'package:syncrow_app/features/shared_widgets/united_text.dart';
import 'package:syncrow_app/utils/resource_manager/assets_manager.dart';
import 'package:syncrow_app/utils/resource_manager/strings_manager.dart';
class CarbonEmission extends StatelessWidget {
const CarbonEmission({
super.key,
});
@override
Widget build(BuildContext context) {
return Container(
padding: const EdgeInsets.symmetric(horizontal: 20, vertical: 10),
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.circular(20),
),
child: Column(
mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
const CardTitle(
title: "Carbon Emission",
),
const Gap(10),
Row(
mainAxisAlignment: MainAxisAlignment.start,
children: [
Row(
mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
SizedBox.square(
dimension: 30,
child: SvgPicture.asset(
IconsManager.CO2,
fit: BoxFit.contain,
),
),
const Gap(5),
const Column(
mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
BodySmall(
text: StringsManager.emissions,
),
UnitedText(
value: '120.00',
valueSize: 14,
unit: 'kg',
unitSize: 10,
),
],
),
],
),
const Gap(20),
Row(
mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
SizedBox.square(
dimension: 30,
child: SvgPicture.asset(
IconsManager.sustainability,
fit: BoxFit.contain,
),
),
const Gap(5),
const Column(
mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
BodySmall(
text: StringsManager.reductions,
),
UnitedText(
value: '20.00',
valueSize: 14,
unit: 'kg',
unitSize: 10,
),
],
),
],
),
],
)
],
),
);
}
}

View File

@ -0,0 +1,20 @@
import 'package:flutter/material.dart';
import 'package:syncrow_app/features/shared_widgets/text_widgets/body_small.dart';
class CardTitle extends StatelessWidget {
const CardTitle({
super.key,
required this.title,
});
final String title;
@override
Widget build(BuildContext context) {
return BodySmall(
text: title,
fontColor: Colors.grey,
fontSize: 12,
);
}
}

View File

@ -0,0 +1,65 @@
import 'package:flutter/material.dart';
import 'package:gap/gap.dart';
import 'package:syncrow_app/features/dashboard/view/card_title.dart';
import 'package:syncrow_app/features/shared_widgets/united_text.dart';
import 'package:syncrow_app/utils/resource_manager/assets_manager.dart';
import 'package:syncrow_app/utils/resource_manager/strings_manager.dart';
class Consumption extends StatelessWidget {
const Consumption({
super.key,
});
@override
Widget build(BuildContext context) {
return Container(
padding: const EdgeInsets.symmetric(horizontal: 20, vertical: 10),
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.circular(20),
),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
crossAxisAlignment: CrossAxisAlignment.end,
children: [
const Column(
mainAxisAlignment: MainAxisAlignment.end,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
CardTitle(
title: StringsManager.ACConsumption,
),
Gap(10),
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
UnitedText(
value: "2",
valueSize: 35,
valueWeight: FontWeight.normal,
unit: "Units",
),
Gap(30),
UnitedText(
value: "720",
valueSize: 35,
valueWeight: FontWeight.normal,
unit: "kWh",
),
],
),
],
),
//TODO: Replace with actual pie chart
SizedBox.square(
dimension: 60,
child: Image.asset(
ImageManager.testDash2,
fit: BoxFit.contain,
),
)
],
),
);
}
}

View File

@ -1,10 +1,49 @@
import 'package:flutter/material.dart';
import 'package:gap/gap.dart';
import 'package:syncrow_app/features/dashboard/view/carbon_emission.dart';
import 'package:syncrow_app/features/dashboard/view/consumption.dart';
import 'package:syncrow_app/features/dashboard/view/live_monitor_tab.dart';
import 'package:syncrow_app/features/shared_widgets/text_widgets/title_medium.dart';
import 'package:syncrow_app/utils/resource_manager/strings_manager.dart';
import 'energy_usage.dart';
class DashboardView extends StatelessWidget {
const DashboardView({super.key});
@override
Widget build(BuildContext context) {
return const Placeholder();
return const Padding(
padding: EdgeInsets.only(top: 60, right: 15, left: 15, bottom: 100),
child: Column(
mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.stretch,
children: [
TitleMedium(
text: StringsManager.dashboard,
style: TextStyle(
fontSize: 32,
fontWeight: FontWeight.bold,
),
),
LiveMonitorTab(),
Gap(10),
EnergyUsage(),
Expanded(
child: Padding(
padding: EdgeInsets.only(top: 20),
child: Column(
mainAxisAlignment: MainAxisAlignment.start,
children: [
Consumption(),
Gap(20),
CarbonEmission(),
],
),
),
),
],
),
);
}
}

View File

@ -0,0 +1,34 @@
import 'package:flutter/material.dart';
import 'package:syncrow_app/features/dashboard/view/energy_usage_header.dart';
import 'package:syncrow_app/utils/resource_manager/assets_manager.dart';
class EnergyUsage extends StatelessWidget {
const EnergyUsage({
super.key,
});
@override
Widget build(BuildContext context) {
return Expanded(
child: DecoratedBox(
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.circular(15),
),
child: Padding(
padding: const EdgeInsets.symmetric(horizontal: 20, vertical: 10),
child: Column(
mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
const EnergyUsageHeader(),
Expanded(
child: Image.asset(ImageManager.testDash),
)
],
),
),
),
);
}
}

View File

@ -0,0 +1,74 @@
import 'package:flutter/material.dart';
import 'package:syncrow_app/features/dashboard/view/card_title.dart';
import 'package:syncrow_app/features/shared_widgets/text_widgets/body_small.dart';
import 'package:syncrow_app/features/shared_widgets/united_text.dart';
import 'package:syncrow_app/utils/resource_manager/strings_manager.dart';
class EnergyUsageHeader extends StatelessWidget {
const EnergyUsageHeader({
super.key,
});
@override
Widget build(BuildContext context) {
return const Column(
mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
CardTitle(
title: StringsManager.energyUsage,
),
Padding(
padding: EdgeInsets.only(top: 10),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Column(
mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
BodySmall(
text: StringsManager.totalConsumption,
),
BodySmall(
text: "JAN 2024",
fontSize: 12,
fontColor: Colors.grey,
),
],
),
Column(
mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.end,
children: [
UnitedText(
value: "1200.00",
valueStyle: TextStyle(
fontSize: 20,
fontWeight: FontWeight.bold,
height: 0,
),
unit: "kWh",
),
UnitedText(
value: "430",
valueStyle: TextStyle(
fontSize: 14,
color: Colors.grey,
),
unit: "AED",
unitStyle: TextStyle(
fontSize: 12,
color: Colors.grey,
),
)
],
),
],
),
)
],
);
}
}

View File

@ -0,0 +1,39 @@
import 'package:flutter/material.dart';
import 'package:syncrow_app/features/dashboard/view/live_monitor_widget.dart';
import 'package:syncrow_app/utils/resource_manager/assets_manager.dart';
import 'package:syncrow_app/utils/resource_manager/strings_manager.dart';
class LiveMonitorTab extends StatelessWidget {
const LiveMonitorTab({
super.key,
});
@override
Widget build(BuildContext context) {
return const Row(
children: [
Expanded(
child: LiveMonitorWidget(
image: IconsManager.active,
title: StringsManager.active,
value: '10.00w',
),
),
Expanded(
child: LiveMonitorWidget(
image: IconsManager.voltMeter,
title: StringsManager.current,
value: '12.1 A',
),
),
Expanded(
child: LiveMonitorWidget(
image: IconsManager.frequency,
title: StringsManager.frequency,
value: '50 Hz',
),
),
],
);
}
}

View File

@ -0,0 +1,62 @@
import 'package:flutter/material.dart';
import 'package:flutter_svg/flutter_svg.dart';
import 'package:gap/gap.dart';
import 'package:syncrow_app/features/shared_widgets/text_widgets/body_medium.dart';
import 'package:syncrow_app/features/shared_widgets/text_widgets/body_small.dart';
class LiveMonitorWidget extends StatelessWidget {
const LiveMonitorWidget({
super.key,
required this.image,
required this.title,
required this.value,
});
final String image;
final String title;
final String value;
@override
Widget build(BuildContext context) {
return Container(
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.circular(15),
),
padding: const EdgeInsets.only(left: 10, top: 5, bottom: 5),
margin: const EdgeInsets.only(right: 5),
child: Row(
mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
SizedBox(
height: 23,
width: 20,
child: SvgPicture.asset(
image,
fit: BoxFit.contain,
),
),
const Gap(5),
Column(
mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisSize: MainAxisSize.min,
children: [
BodySmall(
text: title,
style: const TextStyle(fontSize: 10, color: Colors.grey)),
BodyMedium(
text: value,
style: const TextStyle(
fontSize: 12,
fontWeight: FontWeight.bold,
),
),
],
)
],
),
);
}
}