power_state_monitor 0.1.2
power_state_monitor: ^0.1.2 copied to clipboard
Flutter plugin that exposes Windows sleep/resume power state events via a Dart stream.
import 'package:flutter/material.dart';
import 'package:power_state_monitor/power_state_monitor.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatefulWidget {
const MyApp({super.key});
@override
State<MyApp> createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
final List<String> _events = [];
@override
void initState() {
super.initState();
_initializePowerMonitor();
}
Future<void> _initializePowerMonitor() async {
await PowerStateMonitor.instance.initialize();
PowerStateMonitor.instance.onPowerStateChanged.listen((event) {
setState(() {
final now = DateTime.now();
final timeStr = '${now.hour}:${now.minute}:${now.second}';
_events.insert(0, '[$timeStr] ${event.name}');
// Keep only last 20 events
if (_events.length > 20) {
_events.removeLast();
}
});
// Handle specific events
if (event == PowerStateEvent.resumeAutomatic ||
event == PowerStateEvent.resumeSuspend) {
_onSystemResumed();
}
});
}
void _onSystemResumed() {
// Refresh data, reconnect to servers, etc.
debugPrint('System resumed from sleep/hibernate - refreshing data...');
}
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: const Text('Power State Monitor Demo'),
backgroundColor: Colors.blue,
),
body: Column(
children: [
Container(
padding: const EdgeInsets.all(16),
color: Colors.blue.shade50,
child: const Text(
'This application monitors the system\'s power state.\n'
'Try putting your computer into sleep or hibernation mode.',
style: TextStyle(fontSize: 16),
textAlign: TextAlign.center,
),
),
const Padding(
padding: EdgeInsets.all(16),
child: Text(
'Event history:',
style: TextStyle(fontSize: 18, fontWeight: FontWeight.bold),
),
),
Expanded(
child:
_events.isEmpty
? const Center(
child: Text(
'Waiting for events...\n\n'
'Put the system to sleep,\n'
'then wake it back up.',
textAlign: TextAlign.center,
style: TextStyle(color: Colors.grey, fontSize: 16),
),
)
: ListView.builder(
padding: const EdgeInsets.symmetric(horizontal: 16),
itemCount: _events.length,
itemBuilder: (context, index) {
return Card(
child: ListTile(
leading: Icon(
_getIconForEvent(_events[index]),
color: _getColorForEvent(_events[index]),
),
title: Text(_events[index]),
),
);
},
),
),
],
),
floatingActionButton: FloatingActionButton(
onPressed: () {
setState(() {
_events.clear();
});
},
tooltip: 'Clear history',
child: const Icon(Icons.clear_all),
),
),
);
}
IconData _getIconForEvent(String event) {
if (event.contains('resume')) {
return Icons.power_settings_new;
} else if (event.contains('suspend')) {
return Icons.bedtime;
} else if (event.contains('battery')) {
return Icons.battery_alert;
}
return Icons.info;
}
Color _getColorForEvent(String event) {
if (event.contains('resume')) {
return Colors.green;
} else if (event.contains('suspend')) {
return Colors.orange;
} else if (event.contains('battery')) {
return Colors.red;
}
return Colors.blue;
}
@override
void dispose() {
PowerStateMonitor.instance.dispose();
super.dispose();
}
}