mercury/mercury_frontend/lib/main.dart

84 lines
2.3 KiB
Dart

import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'sensor_provider.dart';
import 'package:timeago/timeago.dart' as timeago;
void main() {
runApp(
ChangeNotifierProvider(
create: (context) => SensorProvider(),
child: const MyApp(),
),
);
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Sensor App',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: const SensorScreen(),
);
}
}
class SensorScreen extends StatefulWidget {
const SensorScreen({super.key});
@override
_SensorScreenState createState() => _SensorScreenState();
}
class _SensorScreenState extends State<SensorScreen> {
@override
void initState() {
super.initState();
WidgetsBinding.instance.addPostFrameCallback((_) {
Provider.of<SensorProvider>(context, listen: false).fetchData();
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text('Mercury'),
),
body: Center(
child: Consumer<SensorProvider>(
builder: (context, sensorProvider, child) {
if (sensorProvider.sensorData == null) {
if (sensorProvider.error != null) {
return Text('Error: ${sensorProvider.error}');
}
return const CircularProgressIndicator();
} else {
final data = sensorProvider.sensorData!;
final timeAgo = timeago.format(DateTime.fromMillisecondsSinceEpoch(data.timestamp));
return Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text('🌡️ Temperature: ${data.temperature}°C'),
Text('💧 Humidity: ${data.humidity}%'),
Text('❄️ Dew Point: ${data.dewPoint}°C'),
Text('🕒 $timeAgo'),
],
);
}
},
),
),
floatingActionButton: FloatingActionButton(
onPressed: () {
Provider.of<SensorProvider>(context, listen: false).fetchData();
},
child: const Icon(Icons.refresh),
),
);
}
}