aboutsummaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/page_dashboard.dart26
-rw-r--r--lib/page_hvac.dart200
2 files changed, 218 insertions, 8 deletions
diff --git a/lib/page_dashboard.dart b/lib/page_dashboard.dart
index bce7590..2ab1d38 100644
--- a/lib/page_dashboard.dart
+++ b/lib/page_dashboard.dart
@@ -58,10 +58,7 @@ class DashboardPage extends StatelessWidget {
Row(
mainAxisAlignment: MainAxisAlignment.spaceAround,
children: [
- Text(
- 'RPM',
- style: Theme.of(context).textTheme.headline4,
- ),
+ _RPMWidget(),
Text(
'Fuel',
style: Theme.of(context).textTheme.headline4,
@@ -73,3 +70,24 @@ class DashboardPage extends StatelessWidget {
);
}
}
+
+// ignore: unused_element
+class _RPMWidget extends StatelessWidget {
+ @override
+ Widget build(BuildContext context) {
+ return Row(
+ mainAxisAlignment: MainAxisAlignment.start,
+ children: [
+ Icon(Icons.fastfood),
+ Container(
+ height: 20,
+ width: 70,
+ child: LinearProgressIndicator(
+ value: 0.75,
+ semanticsLabel: 'Linear progress indicator',
+ ),
+ ),
+ ],
+ );
+ }
+}
diff --git a/lib/page_hvac.dart b/lib/page_hvac.dart
index ea38cb9..df5027e 100644
--- a/lib/page_hvac.dart
+++ b/lib/page_hvac.dart
@@ -1,4 +1,5 @@
import 'package:flutter/material.dart';
+import 'package:numberpicker/numberpicker.dart';
class HVACPage extends StatelessWidget {
@@ -6,13 +7,204 @@ class HVACPage extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Container(
- color: Colors.lime.shade50,
constraints: BoxConstraints.expand(),
alignment: Alignment.center,
- child: Text(
- 'HVAC',
- style: Theme.of(context).textTheme.headline1,
+ child: const MainPage(title: 'AGL - Flutter HVAC'),
+ );
+ }
+}
+
+class _TemperatureSelector extends StatefulWidget {
+ @override
+ _TemperatureSelectorState createState() => _TemperatureSelectorState();
+}
+
+class _TemperatureSelectorState extends State<_TemperatureSelector> {
+ int _currentValue = 22; // INIT FROM AGLJS wrapper
+
+ @override
+ Widget build(BuildContext context) {
+ return Column(
+ children: <Widget>[
+ NumberPicker(
+ value: _currentValue,
+ minValue: 18,
+ maxValue: 25,
+ onChanged: (value) => setState(() => _currentValue = value),
),
+ ],
);
}
}
+
+/// This is the stateful widget that the main application instantiates.
+class HVACFanSpeed extends StatefulWidget {
+ const HVACFanSpeed({Key? key}) : super(key: key);
+ @override
+ State<HVACFanSpeed> createState() => _HVACFanSpeedState();
+}
+
+/// This is the private State class that goes with MyStatefulWidget.
+class _HVACFanSpeedState extends State<HVACFanSpeed> {
+ double _currentSliderValue = 20;
+
+ @override
+ Widget build(BuildContext context) {
+ return Slider(
+ value: _currentSliderValue,
+ min: 0,
+ max: 300,
+ label: _currentSliderValue.round().toString(),
+ onChanged: (double value) {
+ setState(() {
+ _currentSliderValue = value;
+ });
+ },
+ );
+ }
+}
+
+class MainPage extends StatefulWidget {
+ const MainPage({Key? key, required this.title}) : super(key: key);
+
+ final String title;
+
+ @override
+ State<MainPage> createState() => _MyHomePageState();
+}
+
+String chairOn = 'images/HMI_HVAC_Left_Chair_ON.png';
+String chairOff = 'images/HMI_HVAC_Right_Chair_ON.png';
+bool selected = true; // Get from API
+
+class _MyHomePageState extends State<MainPage> {
+ final double fanSpeed = 20;
+
+ Widget titleSection = Container(
+ padding: const EdgeInsets.all(32),
+ child: Row(
+ children: [
+ Expanded(flex: 2, child: const HVACFanSpeed()),
+ Image.asset('images/HMI_HVAC_Fan_Icon.png',
+ width: 100, height: 100, fit: BoxFit.cover),
+ ],
+ ),
+ );
+
+ Widget rightSeat = Container(
+ padding: const EdgeInsets.all(32),
+ child: Column(
+ children: [
+ IconButton(
+ iconSize: 100.0,
+ icon: Image.asset(selected ? chairOn : chairOff,
+ width: 100, height: 100, fit: BoxFit.cover),
+ onPressed: () {
+ selected = !selected;
+ },
+ ),
+ _TemperatureSelector(),
+ ],
+ ),
+ );
+
+ Widget leftSeat = Container(
+ padding: const EdgeInsets.all(32),
+ child: Column(
+ children: [
+ Image.asset('images/HMI_HVAC_Right_Chair_ON.png',
+ width: 100, height: 100, fit: BoxFit.cover),
+ _TemperatureSelector()
+ ],
+ ),
+ );
+
+ Widget centerView = Container(
+ padding: const EdgeInsets.all(32),
+ child: Column(
+ children: [
+ Container(
+ width: 140,
+ height: 100,
+ margin: const EdgeInsets.all(15.0),
+ decoration: BoxDecoration(
+ border: Border.all(color: Colors.green),
+ borderRadius: BorderRadius.circular(20)),
+ child: OutlinedButton(
+ onPressed: () {
+ // Respond to button press
+ },
+ child: Text("A / C"),
+ ),
+ ),
+ Container(
+ width: 140,
+ height: 100,
+ margin: const EdgeInsets.all(15.0),
+ decoration: BoxDecoration(
+ border: Border.all(color: Colors.green),
+ borderRadius: BorderRadius.circular(20)),
+ child: OutlinedButton(
+ onPressed: () {
+ // Respond to button press
+ },
+ child: Text("Auto"),
+ ),
+ ),
+ Container(
+ width: 140,
+ height: 100,
+ margin: const EdgeInsets.all(15.0),
+ decoration: BoxDecoration(
+ border: Border.all(color: Colors.green),
+ borderRadius: BorderRadius.circular(20)),
+ child: OutlinedButton(
+ onPressed: () {
+ // Respond to button press
+ },
+ child: Image.asset('images/HMI_HVAC_Circulation_Inactive.png',
+ width: 100, height: 100, fit: BoxFit.cover)),
+ ),
+ ],
+ ),
+ );
+ Widget actions = Container(
+ padding: const EdgeInsets.all(32),
+ child: Column(
+ children: [
+ Image.asset('images/HMI_HVAC_AirDown_Inactive.png',
+ width: 100, height: 100, fit: BoxFit.cover),
+ Image.asset('images/HMI_HVAC_AirUp_Inactive.png',
+ width: 100, height: 100, fit: BoxFit.cover),
+ Image.asset('images/HMI_HVAC_Front_Inactive.png',
+ width: 100, height: 100, fit: BoxFit.cover),
+ Image.asset('images/HMI_HVAC_Rear_Active.png',
+ width: 100, height: 100, fit: BoxFit.cover),
+ ],
+ ),
+ );
+
+ @override
+ Widget build(BuildContext context) {
+ return Container(
+ decoration: BoxDecoration(
+ gradient: LinearGradient(
+ begin: Alignment.topLeft,
+ end: Alignment.bottomRight,
+ colors: [Colors.black, Colors.teal.shade900])),
+ child: Center(
+ child: Column(
+ mainAxisAlignment: MainAxisAlignment.center,
+ children: <Widget>[
+ titleSection,
+ Row(children: [
+ Expanded(flex: 2, child: rightSeat),
+ Expanded(flex: 2, child: centerView),
+ Expanded(flex: 2, child: leftSeat),
+ Expanded(flex: 2, child: actions)
+ ])
+ ],
+ ),
+ ));
+ }
+}