Files
ThatProject/Esp32_Flutter_firebase_DHT/esp32_firebase/lib/Dashboard.dart

181 lines
5.6 KiB
Dart

import 'package:firebase_auth/firebase_auth.dart';
import 'package:firebase_database/firebase_database.dart';
import 'package:flutter/material.dart';
import 'package:google_sign_in/google_sign_in.dart';
import 'package:rflutter_alert/rflutter_alert.dart';
import 'CircleProgress.dart';
import 'main.dart';
class Dashboard extends StatefulWidget {
@override
_DashboardState createState() => _DashboardState();
}
class _DashboardState extends State<Dashboard>
with SingleTickerProviderStateMixin {
bool isLoading = false;
final GoogleSignIn googleSignIn = GoogleSignIn();
final databaseReference = FirebaseDatabase.instance.reference();
AnimationController progressController;
Animation<double> tempAnimation;
Animation<double> humidityAnimation;
@override
void initState() {
super.initState();
databaseReference
.child('ESP32_Device')
.once()
.then((DataSnapshot snapshot) {
double temp = snapshot.value['Temperature']['Data'];
double humidity = snapshot.value['Humidity']['Data'];
isLoading = true;
_DashboardInit(temp, humidity);
});
}
_DashboardInit(double temp, double humid) {
progressController = AnimationController(
vsync: this, duration: Duration(milliseconds: 5000)); //5s
tempAnimation =
Tween<double>(begin: -50, end: temp).animate(progressController)
..addListener(() {
setState(() {});
});
humidityAnimation =
Tween<double>(begin: 0, end: humid).animate(progressController)
..addListener(() {
setState(() {});
});
progressController.forward();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Dashboard'),
centerTitle: true,
automaticallyImplyLeading: false,
leading: new IconButton(
icon: Icon(Icons.reorder), onPressed: handleLoginOutPopup),
),
body: Center(
child: isLoading
? Column(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
children: <Widget>[
CustomPaint(
foregroundPainter:
CircleProgress(tempAnimation.value, true),
child: Container(
width: 200,
height: 200,
child: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text('Temperature'),
Text(
'${tempAnimation.value.toInt()}',
style: TextStyle(
fontSize: 50, fontWeight: FontWeight.bold),
),
Text(
'°C',
style: TextStyle(
fontSize: 20, fontWeight: FontWeight.bold),
),
],
),
),
),
),
CustomPaint(
foregroundPainter:
CircleProgress(humidityAnimation.value, false),
child: Container(
width: 200,
height: 200,
child: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text('Humidity'),
Text(
'${humidityAnimation.value.toInt()}',
style: TextStyle(
fontSize: 50, fontWeight: FontWeight.bold),
),
Text(
'%',
style: TextStyle(
fontSize: 20, fontWeight: FontWeight.bold),
),
],
),
),
),
)
],
)
: Text(
'Loading...',
style: TextStyle(fontSize: 30, fontWeight: FontWeight.bold),
)),
);
}
handleLoginOutPopup() {
Alert(
context: context,
type: AlertType.info,
title: "Login Out",
desc: "Do you want to login out now?",
buttons: [
DialogButton(
child: Text(
"No",
style: TextStyle(color: Colors.white, fontSize: 20),
),
onPressed: () => Navigator.pop(context),
color: Colors.teal,
),
DialogButton(
child: Text(
"Yes",
style: TextStyle(color: Colors.white, fontSize: 20),
),
onPressed: handleSignOut,
color: Colors.teal,
)
],
).show();
}
Future<Null> handleSignOut() async {
this.setState(() {
isLoading = true;
});
await FirebaseAuth.instance.signOut();
await googleSignIn.signOut();
this.setState(() {
isLoading = false;
});
Navigator.of(context).pushAndRemoveUntil(
MaterialPageRoute(builder: (context) => MyApp()),
(Route<dynamic> route) => false);
}
}