From fd33df443491dcd56000f58e703a776848d4506b Mon Sep 17 00:00:00 2001 From: Ray Jasson <48130098+rayjasson98@users.noreply.github.com> Date: Tue, 29 Dec 2020 04:32:48 +0800 Subject: [PATCH] Update UI for IoT Monitoring Page - Add telemetry data cards with respective icons - Add reload bar --- assets/images/air_humidity.png | Bin 0 -> 9942 bytes assets/images/air_temperature.png | Bin 0 -> 7625 bytes assets/images/soil_moisture.png | Bin 0 -> 14049 bytes assets/images/soil_pH.png | Bin 0 -> 5153 bytes assets/images/soil_salinity.png | Bin 0 -> 6944 bytes lib/ui/IoT/IoT_monitoring_page.dart | 14 +++ lib/ui/IoT/reload_bar.dart | 57 +++++++++ lib/ui/IoT/telemetry_data_card.dart | 140 +++++++++++++++++++++++ lib/ui/IoT/telemetry_data_card_item.dart | 69 +++++++++++ 9 files changed, 280 insertions(+) create mode 100644 assets/images/air_humidity.png create mode 100644 assets/images/air_temperature.png create mode 100644 assets/images/soil_moisture.png create mode 100644 assets/images/soil_pH.png create mode 100644 assets/images/soil_salinity.png create mode 100644 lib/ui/IoT/reload_bar.dart create mode 100644 lib/ui/IoT/telemetry_data_card.dart create mode 100644 lib/ui/IoT/telemetry_data_card_item.dart diff --git a/assets/images/air_humidity.png b/assets/images/air_humidity.png new file mode 100644 index 0000000000000000000000000000000000000000..d6bafb70f4f8af178719ab15dacdc19970441c70 GIT binary patch literal 9942 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 GVgCcI$)Aw` literal 0 HcmV?d00001 diff --git a/assets/images/air_temperature.png b/assets/images/air_temperature.png new file mode 100644 index 0000000000000000000000000000000000000000..2a7390b877751b65799c2d41cebd8afc03a8e0d1 GIT binary patch literal 7625 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 literal 0 HcmV?d00001 diff --git a/assets/images/soil_pH.png b/assets/images/soil_pH.png new file mode 100644 index 0000000000000000000000000000000000000000..41e64d11f2a0f8a9cdc9913aef77f694745b6db1 GIT binary patch literal 5153 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 { + List _cardItems = TelemetryDataCardItem.cardItems; + + @override + void initState() { + tabListView.add(ReloadBar()); + _cardItems.forEach((i) { + tabListView.add(TelemetryDataCard(cardItem: i)); + }); + super.initState(); + } + @override Widget build(BuildContext context) { return super.build(context); diff --git a/lib/ui/IoT/reload_bar.dart b/lib/ui/IoT/reload_bar.dart new file mode 100644 index 0000000..d0c21bb --- /dev/null +++ b/lib/ui/IoT/reload_bar.dart @@ -0,0 +1,57 @@ +import 'package:farmassist/app_theme.dart'; +import 'package:flutter/material.dart'; +import 'package:intl/intl.dart'; + +class ReloadBar extends StatefulWidget { + @override + _ReloadBarState createState() => _ReloadBarState(); +} + +class _ReloadBarState extends State { + String _now = DateFormat.yMd().add_jm().format(DateTime.now()); + + @override + Widget build(BuildContext context) { + return Container( + child: Padding( + padding: const EdgeInsets.only(left: 24.0, right: 24.0), + child: Row( + children: [ + InkWell( + highlightColor: AppTheme.notWhite, + borderRadius: BorderRadius.all(Radius.circular(28.0)), + onTap: () { + setState(() { + _now = DateFormat.yMd().add_jm().format(DateTime.now()); + }); + }, + child: SizedBox( + child: Icon( + Icons.autorenew, + color: AppTheme.darkText, + size: 28, + ), + ), + ), + Expanded( + child: Padding( + padding: const EdgeInsets.only(left: 8.0), + child: Text( + 'Last update: $_now', + textAlign: TextAlign.left, + style: TextStyle( + fontFamily: AppTheme.fontName, + fontWeight: FontWeight.w500, + fontSize: 16, + letterSpacing: 0.5, + color: AppTheme.lightText, + ), + ), + ), + ), + ], + ), + ), + ); + } +} diff --git a/lib/ui/IoT/telemetry_data_card.dart b/lib/ui/IoT/telemetry_data_card.dart new file mode 100644 index 0000000..0c4fa5c --- /dev/null +++ b/lib/ui/IoT/telemetry_data_card.dart @@ -0,0 +1,140 @@ +import 'package:farmassist/app_theme.dart'; +import 'package:farmassist/ui/IoT/telemetry_data_card_item.dart'; +import 'package:flutter/material.dart'; + +class TelemetryDataCard extends StatelessWidget { + const TelemetryDataCard({Key key, this.cardItem}) : super(key: key); + + final TelemetryDataCardItem cardItem; + + @override + Widget build(BuildContext context) { + return Stack( + children: [ + Padding( + padding: const EdgeInsets.only( + left: 24.0, + right: 24.0, + top: 16.0, + bottom: 18.0, + ), + child: Container( + decoration: BoxDecoration( + gradient: LinearGradient( + colors: [ + cardItem.color1, + cardItem.color2, + ], + begin: Alignment.topLeft, + end: Alignment.bottomRight, + ), + borderRadius: BorderRadius.only( + topLeft: Radius.circular(8.0), + bottomLeft: Radius.circular(8.0), + bottomRight: Radius.circular(8.0), + topRight: Radius.circular(68.0), + ), + boxShadow: [ + BoxShadow( + color: AppTheme.grey.withOpacity(0.6), + offset: Offset(1.1, 1.1), + blurRadius: 10.0, + ), + ], + ), + child: Padding( + padding: const EdgeInsets.all(16.0), + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + cardItem.title, + textAlign: TextAlign.left, + style: TextStyle( + fontFamily: AppTheme.fontName, + fontWeight: FontWeight.normal, + fontSize: 20, + letterSpacing: 0.0, + color: AppTheme.white, + ), + ), + Padding( + padding: const EdgeInsets.only(top: 8.0), + child: FractionallySizedBox( + widthFactor: 0.8, + child: Text( + cardItem.description, + textAlign: TextAlign.left, + style: TextStyle( + fontFamily: AppTheme.fontName, + fontWeight: FontWeight.normal, + fontSize: 16, + letterSpacing: 0.0, + color: AppTheme.white, + ), + ), + ), + ), + Padding( + padding: const EdgeInsets.only(top: 16.0), + child: Row( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisAlignment: MainAxisAlignment.center, + children: [ + SizedBox( + height: 30, + width: 30, + child: 1 == 1 // TODO: temporary dummy placeholder + ? Icon( + Icons.warning_rounded, + color: AppTheme.white, + size: 30, + ) + : null, + ), + Expanded( + child: Text( + '68.9', // TODO: temporary dummy placeholder + textAlign: TextAlign.right, + style: TextStyle( + fontFamily: AppTheme.fontName, + fontWeight: FontWeight.w500, + fontSize: 50, + letterSpacing: 0.0, + color: AppTheme.white, + ), + ), + ), + Expanded( + child: Text( + cardItem.unit, + textAlign: TextAlign.left, + style: TextStyle( + fontFamily: AppTheme.fontName, + fontWeight: FontWeight.w500, + fontSize: 22, + letterSpacing: 0.0, + color: AppTheme.white, + ), + ), + ), + ], + ), + ) + ], + ), + ), + ), + ), + Positioned( + top: 4.0, + right: 20.0, + height: 80, + width: 80, + child: Image.asset(cardItem.imagePath), + ) + ], + ); + } +} diff --git a/lib/ui/IoT/telemetry_data_card_item.dart b/lib/ui/IoT/telemetry_data_card_item.dart new file mode 100644 index 0000000..f6cbf1c --- /dev/null +++ b/lib/ui/IoT/telemetry_data_card_item.dart @@ -0,0 +1,69 @@ +import 'dart:ui'; + +class TelemetryDataCardItem { + TelemetryDataCardItem({ + this.title, + this.description, + this.unit, + this.imagePath, + this.color1, + this.color2, + this.index, + }); + + String title; + String description; + String unit; + String imagePath; + Color color1; + Color color2; + int index; + + static List cardItems = [ + TelemetryDataCardItem( + title: 'Air Humidity', + description: 'Relative percentage of water vapour present in air', + unit: '%', + imagePath: 'assets/images/air_humidity.png', + color1: const Color(0xFF6F56E8), + color2: const Color(0xFF79D1FB), + index: 0, + ), + TelemetryDataCardItem( + title: 'Air Temperature', + description: 'Weather parameter that measures how hot or cold the air is', + unit: '°C', + imagePath: 'assets/images/air_temperature.png', + color1: const Color(0xFF006400), + color2: const Color(0xFF1FDF39), + index: 1, + ), + TelemetryDataCardItem( + title: 'Soil Moisture', + description: 'Percentage of volumetric water content in soil', + unit: '%', + imagePath: 'assets/images/soil_moisture.png', + color1: const Color(0xFF800000), + color2: const Color(0xFFD2691E), + index: 2, + ), + TelemetryDataCardItem( + title: 'Soil pH', + description: 'Measure of acidity or alkalinity of soil', + unit: 'pH', + imagePath: 'assets/images/soil_pH.png', + color1: const Color(0xFFFF3F34), + color2: const Color(0xFFFFA334), + index: 3, + ), + TelemetryDataCardItem( + title: 'Soil Salinity', + description: 'Measure of salt content of soil in milliSiemens per cm', + unit: 'mS/cm', + imagePath: 'assets/images/soil_salinity.png', + color1: const Color(0xFF9700CB), + color2: const Color(0xFFF410D9), + index: 4, + ), + ]; +}