87 lines
2.2 KiB
Dart
87 lines
2.2 KiB
Dart
import 'dart:async';
|
|
import 'package:http/http.dart' as http;
|
|
|
|
import 'package:flutter_bloc/flutter_bloc.dart';
|
|
|
|
class EegState {
|
|
final double mind_wandering;
|
|
final double focus;
|
|
|
|
EegState({
|
|
required this.mind_wandering,
|
|
required this.focus,
|
|
});
|
|
}
|
|
|
|
|
|
class EegCubit extends Cubit<EegState> {
|
|
EegCubit() : super(EegState(mind_wandering: 0.0, focus: 0.0)) {
|
|
// Start the timer when the cubit is created
|
|
startPolling();
|
|
}
|
|
|
|
Timer? _timer;
|
|
|
|
void startPolling() {
|
|
// Poll every 1 second (adjust the duration as needed)
|
|
_timer = Timer.periodic(Duration(seconds: 1), (timer) {
|
|
// Simulate getting new EEG data
|
|
// In a real application, you would fetch this data from your EEG device or API
|
|
// double newMindWandering = (DateTime.now().millisecondsSinceEpoch % 100) / 100;
|
|
// double newFocus = 1 - newMindWandering;
|
|
|
|
fetchEegData().then((data) {
|
|
double newMindWandering = data[0];
|
|
double newFocus = data[1];
|
|
// Update the state with the new EEG data
|
|
updateEegData(newMindWandering, newFocus);
|
|
});
|
|
|
|
// updateEegData(newMindWandering, newFocus);
|
|
});
|
|
}
|
|
|
|
|
|
Future<List<double>> fetchEegData() async {
|
|
final url = Uri.parse('http://192.168.83.153:1234');
|
|
|
|
try {
|
|
final response = await http.get(url);
|
|
|
|
if (response.statusCode == 200) {
|
|
// Split the response body by newline and parse as floats
|
|
List<String> values = response.body.trim().split('\n');
|
|
if (values.length == 2) {
|
|
return [
|
|
double.parse(values[0]),
|
|
double.parse(values[1]),
|
|
];
|
|
} else {
|
|
throw Exception('Unexpected response format');
|
|
}
|
|
} else {
|
|
throw Exception('Failed to load EEG data: ${response.statusCode}');
|
|
}
|
|
} catch (e) {
|
|
throw Exception('Error fetching EEG data: $e');
|
|
}
|
|
}
|
|
|
|
|
|
void stopPolling() {
|
|
_timer?.cancel();
|
|
_timer = null;
|
|
}
|
|
|
|
void updateEegData(double mindWandering, double focus) {
|
|
emit(EegState(mind_wandering: mindWandering, focus: focus));
|
|
print('Mind Wandering: $mindWandering, Focus: $focus');
|
|
}
|
|
|
|
@override
|
|
Future<void> close() {
|
|
stopPolling();
|
|
return super.close();
|
|
}
|
|
}
|