From cc9124cd1145ecd0b0c5b2baeb0a3abb7d706a29 Mon Sep 17 00:00:00 2001 From: Felipe Erias Date: Wed, 17 Nov 2021 13:04:50 +0900 Subject: Integrate HVAC page --- lib/page_hvac.dart | 200 +++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 196 insertions(+), 4 deletions(-) (limited to 'lib/page_hvac.dart') 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: [ + 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 createState() => _HVACFanSpeedState(); +} + +/// This is the private State class that goes with MyStatefulWidget. +class _HVACFanSpeedState extends State { + 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 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 { + 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: [ + titleSection, + Row(children: [ + Expanded(flex: 2, child: rightSeat), + Expanded(flex: 2, child: centerView), + Expanded(flex: 2, child: leftSeat), + Expanded(flex: 2, child: actions) + ]) + ], + ), + )); + } +} -- cgit 1.2.3-korg