zeba_academy_behavior_tracker 1.0.0
zeba_academy_behavior_tracker: ^1.0.0 copied to clipboard
AI-driven student behavior analytics engine with session tracking, engagement scoring, focus pattern detection, and usage heatmap generation for Flutter EdTech apps.
example/lib/main.dart
import 'package:flutter/material.dart';
import 'package:zeba_academy_behavior_tracker/zeba_academy_behavior_tracker.dart';
void main() {
runApp(const BehaviorTrackerExampleApp());
}
class BehaviorTrackerExampleApp extends StatelessWidget {
const BehaviorTrackerExampleApp({super.key});
@override
Widget build(BuildContext context) {
return MaterialApp(
debugShowCheckedModeBanner: false,
title: 'Behavior Tracker Example',
theme: ThemeData(primarySwatch: Colors.blue),
home: const DashboardPage(),
);
}
}
class DashboardPage extends StatefulWidget {
const DashboardPage({super.key});
@override
State<DashboardPage> createState() => _DashboardPageState();
}
class _DashboardPageState extends State<DashboardPage> {
late final List<StudySession> _sessions;
late final ActivityAnalytics _analytics;
late final EngagementCalculator _engagement;
late final FocusAnalyzer _focus;
late final HeatmapGenerator _heatmap;
@override
void initState() {
super.initState();
// Example sessions
_sessions = [
StudySession(
startTime: DateTime.now().subtract(const Duration(hours: 4)),
endTime: DateTime.now().subtract(const Duration(hours: 3, minutes: 20)),
interactions: 40,
),
StudySession(
startTime: DateTime.now().subtract(const Duration(hours: 2)),
endTime: DateTime.now().subtract(const Duration(hours: 1, minutes: 30)),
interactions: 50,
),
StudySession(
startTime: DateTime.now().subtract(const Duration(minutes: 50)),
endTime: DateTime.now(),
interactions: 30,
),
];
_analytics = ActivityAnalytics(_sessions);
_engagement = EngagementCalculator(_sessions);
_focus = FocusAnalyzer(_sessions);
_heatmap = HeatmapGenerator(_sessions);
}
@override
Widget build(BuildContext context) {
final dailyMinutes = _analytics.dailyStudyMinutes();
final heatmap = _heatmap.generateHourlyHeatmap();
return Scaffold(
appBar: AppBar(title: const Text('Behavior Tracker Dashboard')),
body: SingleChildScrollView(
padding: const EdgeInsets.all(16),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
_buildCard(
title: 'Total Study Time',
content:
'${_analytics.totalStudyTime.inHours}h ${_analytics.totalStudyTime.inMinutes % 60}m',
),
_buildCard(
title: 'Engagement Score',
content: _engagement.calculateScore().toStringAsFixed(1),
),
_buildCard(
title: 'Average Focus Duration',
content: '${_focus.averageFocusDuration()} mins',
),
const SizedBox(height: 20),
const Text('Daily Study Minutes',
style: TextStyle(fontSize: 18, fontWeight: FontWeight.bold)),
const SizedBox(height: 10),
for (var entry in dailyMinutes.entries)
Text(
'${entry.key.year}-${entry.key.month}-${entry.key.day}: ${entry.value} mins'),
const SizedBox(height: 20),
const Text('Hourly Heatmap',
style: TextStyle(fontSize: 18, fontWeight: FontWeight.bold)),
const SizedBox(height: 10),
_buildHeatmap(heatmap),
],
),
),
);
}
Widget _buildCard({required String title, required String content}) {
return Card(
margin: const EdgeInsets.symmetric(vertical: 8),
elevation: 3,
shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(12)),
child: Padding(
padding: const EdgeInsets.all(16),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Text(title, style: const TextStyle(fontSize: 16)),
Text(content,
style: const TextStyle(fontSize: 18, fontWeight: FontWeight.bold)),
],
),
),
);
}
Widget _buildHeatmap(Map<int, int> heatmap) {
return SizedBox(
height: 200,
child: ListView.builder(
scrollDirection: Axis.horizontal,
itemCount: 24,
itemBuilder: (context, index) {
return Container(
width: 25,
margin: const EdgeInsets.symmetric(horizontal: 2),
color: Colors.blue.withAlpha((0.5 * 255).toInt()),
child: Center(
child: RotatedBox(
quarterTurns: -1, child: Text(index.toString(), style: const TextStyle(fontSize: 10, color: Colors.white)))),
);
},
),
);
}
}